1

JList を更新するとき、JList を更新する前の選択を維持したいと考えています。JList を更新すると、オブジェクトを削除するか、オブジェクトを追加できます。

これは私が今持っているものです:

Object obj = list.getSelectedValue(); // This is line 47
list.clearSelection();
list.setListData(peerList);

if(obj != null)
{
   int selectedIndex = list.getNextMatch(obj.toString(), 0, Position.Bias.Forward);

   if(selectedIndex != -1)
      list.setSelectedIndex(selectedIndex);
   else
      list.clearSelection();
}

しかし、オブジェクトが追加または削除されると、例外がスローされることがあります。

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 3 >= 3
    at java.util.Vector.elementAt(Unknown Source)
    at javax.swing.JList$5.getElementAt(Unknown Source)
    at javax.swing.JList.getSelectedValue(Unknown Source)
    at MyThread$1.run(MyThread.java:47) // I marked up top where line 47 is
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
4

2 に答える 2

3

それは同時実行の問題のように思えます。イベント ディスパッチ スレッド (EDT) で選択インデックスを更新し、要素をすべて削除/追加していますか、それともこれを行う同時スレッドを実行していますか? 選択を変更するか、EDT のリストを変更するだけにしてください。

于 2012-12-14T07:55:34.337 に答える
1

私の問題が何であるかを理解しました。peerListはベクターなので、その前に、JList ではなく、ベクターから要素を追加および削除しますが、これが可能かどうかはわかりません。そのため、Vector からオブジェクトを削除し、それを更新する前に JList から選択した値を取得するように要求した場合、それを見つけることができません。ただし、JList を使用setListDataして更新するまで、JList には削除された要素が表示されたままになります。

于 2012-12-14T08:20:47.477 に答える