19

私は追加ボタンでいくつかのデータを追加できる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

4

4 に答える 4

27

一部のアイテムを削除するためだけに JList ウィジェット全体を再初期化するべきではありません。リスト モデルへの変更は「自動的に」UI に同期されるため、代わりにリスト モデルを操作する必要があります。実際に を使用していると仮定するとDefaultListModel、「すべてクリア」機能を実装するにはこれで十分です。

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt) {
    if(evt.getSource()==jButtonClear) {
        DefaultListModel listModel = (DefaultListModel) jList1.getModel();
        listModel.removeAllElements();
    }
}
于 2012-11-28T04:50:15.480 に答える
8

いくつかの問題がありますが、最初はあなたの例がコンパイルの問題でいっぱいであるため、実際のコードではないことを願っています.

JListと呼ばれる静的メソッドがありませんsetListDatajList1代わりに言っていると思います。

クリーン ボタンをクリックするたびに、新しいモデルとコンポーネントが作成されます...

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"});
    }
}
于 2012-11-28T04:48:10.607 に答える
4

これを試して:

DefaultListModel model = new DefaultListModel();
model.clear();
jList1.setModel(model);
于 2017-10-19T22:56:55.790 に答える