コンボボックスからすべてのアイテムを削除する必要があります
int itemCount = combo.getItemCount();
for(int i = 0; i < itemCount; i++){
combo.removeItemAt(0);
}
このコードは、最後のアイテムを除くすべてのアイテムを削除します。を与えますNullPointerException
。それを修正する方法は?
問題のコードは通常は機能します。ただし、スレッドの問題のようです。別のスレッドがアイテムをいじっている可能性があります。
removeAllItems();
ただし、次の方法を使用する方がよいと思います。
combo.removeAllItems();
JComboBox.removeAllItems()はどうですか?
2 行目:
combo.removeItemAt(0)
;
0
代わりにすべきだと思いますi
。
次のように逆の順序で実行します。
for(int i=combo.getItemCount()-1;i>=0;i--){
combo.removeItemAt(i);
}
しかし、私の場合は正常にcombo.removeAllItems()
動作します
別のスレッドに関連しているという仮定は、常に正しいとは限りません。スレッド自体が問題を引き起こしている可能性があります。
この例外は、コンボ アイテムが削除されたときにイベントがトリガーされ、このイベント処理メソッドでまだコンボボックス アイテムを参照しているために発生することがあります。
たとえば、コード内のどこか (actionPeformed() 以外) で、combo.removeItemAt(0) または removeAllItems() を使用してコンボ ボックスの最後の項目を削除すると、イベント actionPerformed が発生/実行されます。しかし、多くの場合、actionPerformed() メソッドには、ユーザー アクション (ユーザーがコンボボックスのどこかをクリックした) に反応するコードが含まれています。そのため、最後のアイテムが削除されると、コンボボックスにはアイテムがなくなり、actionPerformed() でアイテムまたはインデックスを参照すると、例外が発生します。
これに対する解決策は、コードを actionPerformed() から、たとえば mouseClicked() など、目的に応じて別のイベント ハンドラに移動することです。
removeAllItems() すべてのものを削除しますが、コンボボックスにデータを追加した後、そこには表示されず、 nullPointException が表示されます
これを使用して、コンボ ボックスからすべての要素を削除します。
DefaultComboBoxModel model = (DefaultComboBoxModel) ComboBox.getModel();
model.removeAllElements();