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

リーダーを追加して 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 に答える
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です。代わりに、その中のデータをシリアル化する必要があります。

于 2013-05-23T16:16:41.940 に答える