簡體   English   中英

將項添加到JList會刪除所有其他項

[英]Adding an item to a JList remove all other items

我需要一些關於向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();

每次添加閱讀器並在JList上設置它時,您似乎都在創建新模型。

我認為使用更靈活且適合您的JList的ListModel會更好。 請參閱Java教程: http//docs.oracle.com/javase/tutorial/uiswing/components/list.html

這是JList.setListData(vector)的javadoc:

從項目數組構造只讀ListModel,並使用此模型調用setModel。 嘗試將null值傳遞給此方法會導致未定義的行為,並且很可能會導致異常。 創建的模型直接引用給定的數組。 嘗試在調用此方法后修改數組會導致未定義的行為。

它聲明在調用setListData()之后你不能修改向量,而這正是你在這里所做的。

要添加和刪除列表中的項,可以使用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 )通常是個壞主意。 相反,您應該只序列化其中的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM