JavaのGUIアプリケーションで、値がjListに追加されたときにIndexOutOfBoundsExceptionsが発生することがあります。jListのselectedIndexがコレクションのサイズよりも大きいのはなぜですか?
値が選択され、別の値が追加された場合は例外が発生しているようです。ユーザーがインデックスを選択したときに何かが発生する必要があるため、選択値の変更のためのリスナーがありますが、この値は新しい値が追加されたときに発生します。私はちょうどAbstractListModel
を拡張するカスタムListModel
を使用し、完全に有効な方法で必要なメソッドをオーバーライドします。
- 値がリストに追加されたときにプログラムで選択が変更されるのはなぜですか?これは視覚的に表現されていません。
- なぜ実際には存在しないインデックスを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、そのlistmodelとその選択モデルがどのように機能しているかを完全に理解している人なら、何が間違っているのか理解していると思います。これに関する助けに感謝します。
私はあなたの 'ListModel'を見るでしょう。どういうわけか 'JList'はあなたの' ListModel'と同期していません。おそらくあなたは 'ListModel'ソースを投稿することができます。 –
listmodelは非常に簡単です。アイテムを格納するarraylistがあります(これは適切なコレクションではないかもしれません)。オブジェクトの追加、オブジェクトの削除、インデックスの削除、オブジェクトの取得、およびオブジェクトのインデックスの取得という5つのメソッドしかありません。これらのメソッドのうちの4つは、arraylistで適切なメソッドを呼び出すだけです。アイテムが削除されると、私は 'fireIntervalRemoved(this、0、list.size());'を実行し、アイテムが追加されたときに 'fireIntervalAdded(this、0、list.size());'を実行してから、 arrayListそれを考えると、並べ替えは問題の原因になる可能性があります。 – MarioDS
注意:_do not_モデル外のコードからfireXXメソッドを呼び出す - リスナーに通知することは、**モデルの基本的な責任ですそれ自体、addValueメソッドで実装する必要があります – kleopatra