追加ボタンでデータを追加できるGUIのjListがあります。すべての要素をクリアするClearという別のボタンを追加したいもの。私はこれを試しました:
private void jButtonClearActionPerfomed(Java.awt.event.ActionEvent evt)
{
DefaultListModel listmodel=new DefaultListModel();
jList1 = new JList(listmodel);
if(evt.getSource()==jButtonClear) JList.setListData(new String[0];
else listmodel.removeAllElements();
}
追加ボタンをクリックすると、要素が追加されます。
クリアボタンをクリックすると、要素が削除されます。
しかし、[追加]ボタンをもう一度クリックすると、jList1
には何も表示されません。
JListウィジェットの一部を削除するためだけにJListウィジェット全体を再初期化するべきではありません。変更はUIに「自動的に」同期されるため、代わりに、リストモデルを操作する必要があります。実際にDefaultListModel
を使用していると想定すると、「Clear All」機能を実装するにはこれで十分です。
private void jButtonClearActionPerfomed(Java.awt.event.ActionEvent evt) {
if(evt.getSource()==jButtonClear) {
DefaultListModel listModel = (DefaultListModel) jList1.getModel();
listModel.removeAllElements();
}
}
問題はたくさんありますが、最初の例はコンパイルの問題でいっぱいなので、それが実際のコードではないことを願っています。
JList
には、setListData
という静的メソッドがありません。 jList1
代わりに。
クリーンボタンをクリックするたびに、新しいモデルとコンポーネントが作成されます...
private void jButtonClearActionPerfomed(Java.awt.event.ActionEvent evt)
{
// ??
DefaultListModel listmodel=new DefaultListModel();
jList1 = new JList(listmodel);
// ??
if(evt.getSource()==jButtonClear) jList1.setListData(new String[0]);
else listmodel.removeAllElements();
}
これまでの逆参照に成功しましたjList1
がポイントしていたため、操作しようとするたびに、画面上のコンポーネントを操作しなくなりました。
もう1つの問題は、空の配列をsetListData
メソッドに提供することです。これは、基本的に「リストに何も追加しないでください」と言っているようなものです。
このようなものを試してください。
private void jButtonClearActionPerfomed(Java.awt.event.ActionEvent evt)
{
DefaultListModel listmodel = (DefaultListModel)jList1.getModel();
if(evt.getSource()==jButtonClear) {
listmodel.removeAllElements();
} else {
listModel.addElement(new String[]{"Hello"});
}
}
DefaultListModel model=new DefaultListModel();
model.clear();
jList1.setModel(model);
これを試して