【问题标题】:Remove an element from JList从 JList 中删除一个元素
【发布时间】:2011-02-22 17:13:24
【问题描述】:

我尝试从 jList 中删除选定的元素,并得到异常:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 0
        at java.util.Vector.elementAt(Vector.java:447)
        at javax.swing.DefaultListModel.remove(DefaultListModel.java:493)
        at gui.Back.jButton2ActionPerformed(Back.java:410)
        at gui.Back.access$300(Back.java:9)
        at gui.Back$5.actionPerformed(Back.java:146)

我的代码:

DefaultListModel dlm = (DefaultListModel) jList1.getModel();
//System.out.println(dlm.getSize());
dlm.remove(jList1.getSelectedIndex()); //removeElementAt(int i) don't work too
jList1.setModel(dlm);

这很奇怪,因为 dlm.getSize();返回 2。

我做错了什么?

【问题讨论】:

  • 必须从 EDT 修改 GUI 元素。是这样吗?
  • 很难给出一个有用的答案,因为发布的 3 行代码并未反映异常的原因。
  • getSize 不能返回 2。如果是,则异常不会说 1 >= 0。如果 getSize 确实返回 2,则可能有另一个线程正在从同一线程中删除元素列表?

标签: java swing exception jlist


【解决方案1】:

我的做法如下:

final int index = mylist.getSelectedIndex();

如果(索引 >= 0){
((DefaultListModel) mylist.getModel()).removeElementAt(index);
}

删除数据后,您无需再次重新设置 ListModel。

【讨论】:

    【解决方案2】:

    阅读 JList API 并点击关于“如何使用列表”的 Swing 教程的链接,以获取执行此操作的工作示例。

    然后将您的代码与工作代码进行比较,看看有什么区别。

    我们无法根据几行代码告诉您问题。

    【讨论】:

      【解决方案3】:

      我也多次遇到过这个问题。检查变量断点会显示返回的index value < (size - 1),因此在不希望抛出IOOB Exception 的参数内。我一直无法找出原因。

      但是,我已经管理了一个可接受的解决方法,即将我自己的数据外部模型保存在 ArrayList 中并对其进行编辑。然后,转换为数组并通过list.setListData() 方法更新。效率不高,但很实用,是我发现的唯一完全保持数据完整性的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-31
        • 1970-01-01
        • 2012-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多