web-dev-qa-db-ja.com

JFrameのJListを更新する

ベクターからの情報を表示するJListがあります。その後、ユーザーはこのベクターに情報を追加および削除できます。ベクターにアイテムが追加/削除されたときにJFrame内のJListを更新できますか?現在やっています。

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

しかし、これはJListを新しいものに更新しません。チェックしましたが、ベクターのコンテンツなどは変更されますが、リストが更新されません。どうして?どうすれば修正できますか?

21
Skizit

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

Vectorが変更されたためにListModelを再作成する場合は、次のようにしてリストを更新します。

list.setModel( theNewModel );

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

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

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

29
camickr

ベクトルを変更した後、JlistでpdateUIを呼び出します。

5
gerardw

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

Jlist_name.ensureIndexIsVisible(model_name.getSize());

2
Cousin Roy

ベクトルが変化するたびにlist.setListData(vector)を使用できます

0
Ikkesh Ramanna