我正在忙着使用Java中的GUI应用程序,当有一个值添加到jList时,我有时会遇到IndexOutOfBoundsExceptions。
当选择一个值,然后添加另一个值时,似乎会发生异常。我有一个选择更改的监听器,因为当用户选择索引时需要发生某些事情,但是当添加新值时也会触发此事件。我使用只扩展ListModel
的自定义AbstractListModel
,并以完全有效的方式覆盖必要的方法。
我现在已经两次使用jList了(我们最近开始在学校做GUI)而且我两次都遇到了问题。我第一次通过在添加值之前清除选择来解决它,但这不是一个非常好的解决方案。我不认为这是必要的。
我不知道为什么会这样,我没有奇怪的代码或任何东西。在伪代码中,会发生这种情况:
listmodel.addValue(object);
listmodel.fireIntervalAdded();
//selection event occurs
selectedObject = listmodel.getValueAt(list.getSelectedIndex()); //indexoutofboundsexception
//index = 5, size = 3 (for example) when there are 2 objects in list and first is selected.
我现在不提供更多代码,因为我觉得它并不真正相关。我认为任何能够理解jList,它的listmodel及其选择模型如何工作的人都能理解错误。对此有任何帮助表示赞赏。
答案 0 :(得分:3)
当您将单个项添加到列表模型时,问题很可能是您正在调用fireIntervalAdded(this, 0, list.size())
。 signature是:
protected void fireIntervalAdded(Object source, int index0, int index1)
请注意,index0
是添加项的起始索引,index1
是结束索引。因此,单个项目index0
应与index1
相同。当您使用fireIntervalAdded
调用0, list.size()
时,您告诉JList已添加N个项目,其中N = list.size()
。因此,JList
认为项目列表模型中的项目数量更多。
删除项目时也是如此。