1

我有一个 jtextfield,我可以在其中添加一个元素,然后单击一个按钮,我想将其添加到 jlist,现在我遇到的问题是,通过单击按钮,它将添加我想要的元素,但是当我添加另一个元素时列表中的元素,旧元素消失了,新元素出现在它的位置。这是我的代码:

 private void addActionPerformed(java.awt.event.ActionEvent evt) {                                    

    DefaultListModel  model1= new DefaultListModel();

    model1.addElement(desc.getText());
    jList2.setModel(model1);
    jList2.setSelectedIndex(0);
    desc.setText("");
} 

任何人都可以帮助我吗?谢谢

4

4 回答 4

2

每次单击按钮时,您都会创建一个新的 DefaultListModel 并将元素添加到这个全新的列表中。因此,您不能将它们全部添加到同一个列表中。

而是在方法之外定义您的 DefaultListModel model1addActionPerformed并使用对内部对象的引用,如下所示:

DefaultListModel  model1= new DefaultListModel();

private void addActionPerformed(java.awt.event.ActionEvent evt) {                                     
      model1.addElement(desc.getText());
      jList2.setModel(model1);
      jList2.setSelectedIndex(0);
      desc.setText("");

} 
于 2013-03-20T14:38:27.683 回答
1

JList每次单击 时,您都在更换模型JButton。相反,您可以在启动时在类级别使用单个DefaultListModel并添加到其中。

于 2013-03-20T14:37:10.110 回答
0
// Only once (may be in constructor),
// don't put this code in ActionListener method actionPerformed().
DefaultListModel model1 = new DefaultListModel(); 

其余代码不变。

于 2013-03-20T14:40:18.777 回答
0
    listModel = new DefaultListModel();
    listModel.addElement("Jane Doe");
    listModel.addElement("John Smith");
    listModel.addElement("Kathy Green");


    list = new JList(listModel);
public void actionPerformed(ActionEvent e) {
    int index = list.getSelectedIndex();
    listModel.remove(index);

    int size = listModel.getSize();

    if (size == 0) { //Nobody's left, disable firing.
        fireButton.setEnabled(false);

    } else { //Select an index.
        if (index == listModel.getSize()) {
            //removed item in last position
            index--;
        }

        list.setSelectedIndex(index);
        list.ensureIndexIsVisible(index);
    }
}
于 2013-03-20T14:41:38.490 回答