0

我需要一些关于将项目添加到 JList 的帮助。我从事一些“图书馆”类的项目。而且我需要将读者添加到已经存在的 JList 中。但是当我尝试添加它时,JList 只是重置,删除所有阅读器并开始将阅读器添加到新的空白 JList。但我不需要它来制作新列表,而是将其添加到已经存在的列表中。

这是我的代码:

listCtenaru = new JList(vector);
vector = new Vector<String>();

    FileInputStream fos = new FileInputStream("myjlist.bin");
    ObjectInputStream oss = new ObjectInputStream(fos);
    listCtenaru = (JList)oss.readObject();

    listScroll = new JScrollPane();
    listScroll.add(listCtenaru);

和动作监听事件

public void actionPerformed(ActionEvent e) {
       String jmeno = pole1.getText();
       String prijmeni = pole2.getText();

       listCtenaru.setListData(vector);
       vector.addElement(jmeno +" "+ prijmeni);

       pole1.setText("");
       pole2.setText("");

       pole1.requestFocus();
4

2 回答 2

1

要在列表中添加和删除项目,您可以使用ListModel

// To create:
DefaultListModel model = new DefaultListModel();
for(Object item : (Object[])ois.readObject()) {
   model.addElement(item);
}
JList list = new JList(model);

// To add:
model.addElement("New element");

// To save:
oos.writeObject(model.toArray());

顺便说一句,序列化整个 Swing 组件(如 a )通常是个坏主意JList。相反,您应该只序列化其中的数据。

于 2013-05-23T16:16:41.940 回答
1

每次添加阅读器并将其设置在 JList 上时,您似乎都在创建一个新模型。

我认为使用更灵活且适合您的 JList 的 ListModel 会更好。请参阅 Java 教程:http ://docs.oracle.com/javase/tutorial/uiswing/components/list.html

这是 JList.setListData(vector) 的javadoc:

从项目数组构造一个只读 ListModel,并使用此模型调用 setModel。尝试将 null 值传递给此方法会导致未定义的行为,并且很可能会导致异常。创建的模型直接引用给定的数组。在调用此方法后尝试修改数组会导致未定义的行为。

它声明你不能在调用 setListData() 之后修改向量,这正是你在这里所做的。

于 2013-05-23T16:16:10.663 回答