2010-11-24 6 views
18

ベクトルの情報を表示するJListがあります。ユーザーはこのベクトルから情報を追加したり削除したりすることができます。アイテムがVectorに追加/削除されたときに、JFrame内のJListを更新することは可能ですか?現在、私は行っています..JFrameのJListをリフレッシュする

list = new JList(names); 
jframe.add(new JScrollPane(list), BorderLayout.CENTER); 

しかし、これはJListを新しいものにリフレッシュしません。私はチェックして、私のベクトルの内容などは変わるが、リストはさわやかではない。どうして?どうすれば修正できますか?

+1

JListのモデルとしてどのクラスを使用していますか?更新されたときに通知するのはListModelの仕事です。そのため、JListは基になるデータが変更されたときに自身を再描画できます。 –

+0

マイク、あなたが答えに入れたら、私はそれをアップヴォートするだろう。 –

答えて

26

ベクターを更新しないでください。変更はListModelに直接行われ、テーブルは自動的に再描画されます。

あなたが理由のベクトルへの変更のListModelを再作成することを決定した場合、その後、あなたがやってリストを更新します。

list.setModel(theNewModel); 

編集:ベクトルを忘れて、DefaultListModelに直接データをロード:

DefaultListModel model = new DefaultListModel(); 
model.addElement("one"); 
model.addElement("two"); 
JList list = new JList(model); 

データを変更する必要があるときは、addElement()、removeElement()またはset()メソッドを使用してモデルを直接更新します。リストは自動的に再描画されます。

0

私はJlistのグラフィック 'リフレッシュ'の解決策を見つけたと思います。 Jlistが保持するモデルの要素を追加または削除するたびに、このメソッドを呼び出してみてください。

Jlist_name.ensureIndexIsVisible(model_name.getSize());