【问题标题】:How to dynamically add items to a JList?如何将项目动态添加到 JList?
【发布时间】:2015-04-17 15:07:12
【问题描述】:

每当按下按钮时,我都无法将项目添加到名为 lstContacts 的 JList。

当我按下我的新联系人按钮时,应该在lstContacts 中添加一行,但当我按下按钮时,没有任何反应。

这是我的新联系人按钮的动作监听器:

newContactButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Contacts contacts = new Contacts();

            contacts.createContact();
        }
    });

这是我在联系人类中的createContact 方法:

ArrayList<String> contactsList = new ArrayList<String>();
public void createContact() {
    ContactsDB database = new ContactsDB();
    System.out.println("new contact");
    contactsList.add("New Contact");
    listModel.addElement("New Contact");
}

最后这是我的createCustomUIComponent() 方法:

private void createUIComponents() {
    // TODO: place custom component creation code here
    listModel = new DefaultListModel();
    lstContacts = new JList<String>(listModel);
}

为什么没有将新联系人添加到我的JList?

【问题讨论】:

  • 强烈建议使用GlazedLists——它们使数据从模型自动传播到视图变得非常容易。

标签: java swing jlist


【解决方案1】:

问题出在这里:

Contacts contacts = new Contacts();

contacts.createContact();

每次单击按钮时都会创建一个新的联系人对象,但JList 没有对Contacts 对象的引用。我不知道联系人对象是如何定义的,但您应该确保要添加联系人的对象引用了DefaultListModel。

我看到的另一个问题(但不会导致您发布的问题)是您调用new DefaultListModel(),但列表模型是参数化类型。你可能想打电话给new DefaultListModel&lt;String&gt;()。

【讨论】:

    【解决方案2】:
    1. 不要创建 ArrayList 或 Contacts。所有Contact 数据都应该存储在ListModel 中。

    2. 因此,当您单击按钮时,您所做的就是创建一个Contact 并将Contact 添加到DefaultListModel。但是,您的代码没有多大意义,因为您只是在创建一个空联系人。我希望Contact 有一个名字或其他东西。所以你真正想要做的是有一个文本字段,用户可以输入一个名字,然后当你点击按钮时,你使用名字数据创建一个Contact,然后将Contact添加到列表中。

    阅读 How to Use Lists 上的 Swing 教程部分。 ListDemo 示例向您展示了如何从 DefaultListModel 动态添加/删除项目。下载示例并修改工作示例以满足您的特定要求。学习新概念时,从工作代码开始。

    【讨论】:

      【解决方案3】:

      首先你必须有一个新的默认ListView:

       DefaultListModel listModel = new DefaultListModel();
      

      然后使用此列表构建您的JList:

       JList jList = new JList(listModel);
      

      如果您想更改您考虑的每项操作的列表,请致电 addElement 在您的 jList 上:

      listModel.addElement("This is a test contact");
      

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。
      猜你喜欢
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      相关资源
      最近更新 更多