我尝试从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.
我做错了什么?
答案 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()
方法更新。效率不高,但很实用,而且是我发现完全保持数据完整性的唯一方法。