java - 如何在 JList 中找到一个项目并将其设置为选定值?

标签 java swing jlist

当我更新 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 上的列表。

关于java - 如何在 JList 中找到一个项目并将其设置为选定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13874657/

相关文章:

java - 错误: constructor in class cannot be applied to given types

java - 是否可以将参数传递给 Java 构造函数方法?如果是这样,这是好的做法吗?

java - 创建 JTable java

java - 如何将元素添加到现有的 JList

java - 给定代码的时间复杂度是多少

java - ByteArrayOutputStream/InputStream 在 S3 导入时丢失换行符

java - JTable insertRow ArrayIndexOutOfBoundsException

java - 谁能告诉我为什么我的更改数量按钮没有更改数量?

java - 我有一个 JFrame GUI(使用 GUI 构建器),其中包含来自 swing 控件的列表 [JList],但无法在没有错误的情况下调用 setListData(Object[])

java - 使用向上和向下键单步浏览 JList