我需要一些关于向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();
答案 0 :(得分:1)
每次添加阅读器并将其设置在JList上时,您似乎正在创建新模型。
我认为使用更灵活且适合您的JList的ListModel会更好。请参阅Java教程:http://docs.oracle.com/javase/tutorial/uiswing/components/list.html
这是JList.setListData(vector)的javadoc:
从项目数组和调用构造一个只读ListModel 使用此模型的setModel。尝试将null值传递给此值 方法导致未定义的行为,并且很可能导致异常。该 创建的模型直接引用给定的数组。试图修改 调用此方法后的数组会导致未定义的行为。
它声明在调用setListData()之后你不能修改向量,这正是你在这里所做的。
答案 1 :(得分: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组件(如JList
)通常是个坏主意。相反,您应该只是序列化其中的数据。