如何将对象添加到可观察的阵列支持列表?

时间:2015-04-17 21:26:04

标签: java arrays arraylist collections javafx

所以我有一个名为mailbox的类,它是一组消息。

在“服务器”类中创建的消息示例:

Message message1 = new Message(senderRand, recipRand, subject1, today, body1);

邮箱类:

public class Mailbox {

    public String name;
    ObservableList<String> messagelist = FXCollections.observableArrayList();
    ListView<String> list = new ListView<String>(messagelist);

    public Mailbox (String name) {
        this.name = name;
    }

    public int addMessage(Message message) {
      messagelist.add(message);
    }

我不确定我在做什么,但我的想法是我有一个像“收件箱”这样的邮箱对象,用于在javafx应用程序上显示电子邮件消息对象。然后我需要从“收件箱”邮箱中删除邮件并将其移动到“垃圾邮件”邮箱。

基本上我不明白如何创建这个支持数组。我应该在Mailbox类中扩展集合吗?我不知道如何格式化此邮箱类,以便我可以从javafx应用程序添加/删除邮件。我的javafx应用程序只是一个邮箱列表(收件箱,重要,垃圾箱),旁边是所选邮箱的邮件列表,旁边是所选邮件的显示。

需要邮箱是对象的集合。不知道怎么做。

1 个答案:

答案 0 :(得分:0)

解决方案

  • 您不需要针对您的用例的支持列表(FXCollections.observableArrayList()调用已经为您创建了一个列表)。
  • 您需要相应地设置列表类型(<Message>,而不是<String>)。

示例代码

public class Mailbox {
    private final String name;
    private final ObservableList<Message> messages =
        FXCollections.observableArrayList();

    public Mailbox (String name) {
        this.name = name;
    }

    public void addMessage(Message message) {
        messages.add(message);
    }

    public ObservableList<Message> messages() {
        return FXCollections.unmodifiableObservableList(messages);
    }

    public String getName() {
        return name;
    }
}

实施说明

上述解决方案使用FXCollections.unmodifiableObservableList()在提供的可观察列表之上创建并返回不可修改的包装列表。

return FXCollections.unmodifiableObservableList(messages);

如果外部对象可以直接修改消息列表而不与邮箱方法进一步交互,那么你可以写下:

return messages;

如果是这种情况,那么您可能根本不需要addMessage方法调用,因为该类的用户可以只写:

mailbox.messages().add(new Message());