0

Java の GUI アプリケーションで忙しいので、値が jList に追加されたときに IndexOutOfBoundsExceptions が発生することがあります。

値が選択されてから別の値が追加されると、例外が発生するようです。ユーザーがインデックスを選択したときに何かが発生する必要があるため、選択変更のリスナーがありますが、このイベントは新しい値が追加されたときにも発生します。必要なメソッドを完全に有効な方法でListModel拡張およびオーバーライドするカスタムを使用します。AbstractListModel

  1. 値がリストに追加されると、プログラムで選択が変わるのはなぜですか? これは視覚的に表現されていません。
  2. jList で、実際には存在しないインデックスを選択できるのはなぜですか?

私は jList を 2 回使用しました (最近、学校で GUI を使い始めました) が、どちらも問題がありました。値が追加される前に選択をクリアすることで初めて解決しましたが、それは本当に良い解決策ではありません。これは必要ないと思います。

なぜこれが発生するのかわかりません。奇妙なコードなどはありません。疑似コードでは、次のようになります。

listmodel.addValue(object);
listmodel.fireIntervalAdded();
//selection event occurs
selectedObject = listmodel.getValueAt(list.getSelectedIndex()); //indexoutofboundsexception
//index = 5, size = 3 (for example) when there are 2 objects in list and first is selected.

あまり関係がないと思うので、今は追加のコードを提供していません。jList、そのリストモデル、およびその選択モデルがどのように機能するかを完全に理解している人なら、何が問題なのかを理解できると思います。これに関するヘルプをいただければ幸いです。

4

1 に答える 1

3

問題は、単一の項目がリスト モデルに追加されfireIntervalAdded(this, 0, list.size())たときに呼び出している可能性が最も高いです。署名は次のとおりです。

protected void fireIntervalAdded(Object source, int index0, int index1)

index0は追加されたアイテムの開始インデックスであり、は終了インデックスであることに注意してくださいindex1。したがって、単一のアイテムindex0の場合は と同じである必要がありますindex1。で呼び出すfireIntervalAdded0, list.size()、N 個のアイテムが追加されたことを JList に伝えます。ここで、N=list.size()です。したがって、JListは、リスト モデルよりも多くのアイテムがあると考えます。

アイテムを削除する場合も同様です。

于 2012-04-13T23:15:16.700 に答える