簡體   English   中英

如何在JList中找到項目並將其設置為選定值?

[英]How do I find an item in a JList and set that as the selected value?

當我更新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)

在我看來,這似乎是一個並發問題。 您是否在事件調度線程(EDT)上更新選擇索引並刪除/添加元素,或者您是否正在運行執行此操作的並發線程? 您應該只更改選擇或修改EDT上的列表。

我弄清楚我的問題是什么。 peerList是一個Vector,所以在此之前我從Vector中添加和刪除元素,而不是JList,盡管我不知道這是否可行。 因此,如果我從Vector中刪除了一個對象,並且在更新它之前我要求從JList中獲取所選值,它將無法找到它。 但是在您使用setListData並更新JList之前,JList仍將顯示已刪除的元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM