从JList中删除元素

时间:2011-02-22 17:13:24

标签: java swing exception jlist

我尝试从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.

我做错了什么?

3 个答案:

答案 0 :(得分:2)

我的方式如下:

final int index = mylist.getSelectedIndex();

if (index >= 0) {
    ((DefaultListModel) mylist.getModel()).removeElementAt(index);
}

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

答案 1 :(得分:1)

阅读JList API并按照指向“如何使用列表”的Swing教程的链接获取执行此操作的工作示例。

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

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

答案 2 :(得分:1)

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

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