【问题标题】:How to group content and add it to ArrayList as one object?如何对内容进行分组并将其作为一个对象添加到 ArrayList?
【发布时间】:2015-02-04 22:10:46
【问题描述】:

我在我的 GUI 设计中声明了几个摆动组件。我已经成功地将大部分组件转换为如下所示的字符串格式:

String NameOfCruise = Cruisename.getText().trim(); //JTextField
String startLValue = startL.getSelectedItem().toString(); //JComboBox
String endLValue = endL.getSelectedItem().toString();  // JComboBox
new SimpleDateFormat("dd/MM/yyyy").format(model1.getValue())); //JSpinner
String Shipname = ShipList.getSelectedValue().toString(); // JList

上述组件的目的是构建一个允许用户向系统添加新 Cruise 的表单。获得上面所有的表单输入后,我想将它存储到一个ArrayList中。

 ArrayList Cruise = new ArrayList();

但是,我想以这种格式存储它:

Cruise Name: ________
Start Port: _________
End Port: _______
Start Date: _________
End Date: _______
Assigned to ship: ______

因此,如果我可以选择列出系统中的所有游轮,它会将其显示为一个对象。例如,如果我在 ArrayList 中有一个 Cruise,它也会显示分配给它的所有详细信息。

有没有办法做到这一点?

【问题讨论】:

  • 阅读封装和面向对象的原则。

标签: java swing oop arraylist


【解决方案1】:

以下是如何使用正确数据表示的示例:

public static void main(String[] args) {
    List<Cruise> cruiseList = new ArrayList<Cruise>();
    cruiseList.add(new Cruise("Cruise 1", "Florida", "Puerto Rico", new Date(), new Date(), "Captain X"));
    System.out.println(cruiseList.get(0));
}

private static class Cruise {
    private String name;
    private String startPort;
    private String endPort;
    private Date startDate;
    private Date endDate;
    private String assignedToShip;

    public Cruise(String name, String startPort, String endPort, Date startDate, Date endDate, String assignedToShip) {
        super();
        this.name = name;
        this.startPort = startPort;
        this.endPort = endPort;
        this.startDate = startDate;
        this.endDate = endDate;
        this.assignedToShip = assignedToShip;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("Cruise Name: ").append(name).append("\n");
        sb.append("Start Port: ").append(startPort).append("\n");
        sb.append("End Port: ").append(endPort).append("\n");
        sb.append("Start Date: ").append(startDate).append("\n");
        sb.append("End Date: ").append(endDate).append("\n");
        sb.append("Assigned to ship: ").append(assignedToShip).append("\n");
        return sb.toString();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getStartPort() {
        return startPort;
    }

    public void setStartPort(String startPort) {
        this.startPort = startPort;
    }

    public String getEndPort() {
        return endPort;
    }

    public void setEndPort(String endPort) {
        this.endPort = endPort;
    }

    public Date getStartDate() {
        return startDate;
    }

    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }

    public Date getEndDate() {
        return endDate;
    }

    public void setEndDate(Date endDate) {
        this.endDate = endDate;
    }

    public String getAssignedToShip() {
        return assignedToShip;
    }

    public void setAssignedToShip(String assignedToShip) {
        this.assignedToShip = assignedToShip;
    }
}

【讨论】:

    【解决方案2】:

    您可能会将数据与其表示混淆。我想您会将 Cruise 对象存储在您的 ArrayList&lt;Cruise&gt; 中,所有这些都是纯数据,包括字符串、日期等,这应该是您程序的 Model 的一部分。如何显示将取决于您的 GUI 或 View。如果您想以您提到的格式显示List&lt;Cruise&gt;,例如,您可以在 JList 中执行此操作,并让单元格渲染器返回一个 JPanel,其中适当的字段填充了各个 Cruise 的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 2021-05-26
      • 2019-02-18
      • 1970-01-01
      相关资源
      最近更新 更多