0

我正忙于 Java 中的 GUI 应用程序,当将值添加到 jList 时,有时会遇到 IndexOutOfBoundsExceptions。

选中值时似乎发生异常,然后添加另一个。我有一个选择更改的侦听器,因为当用户选择索引时需要发生一些事情,但是当添加新值时也会触发此事件。我使用一个自定义ListModel,它只是以一种完全有效的方式扩展AbstractListModel和覆盖必要的方法。

  1. 为什么将值添加到列表中时程序中的选择会发生变化?这在视觉上没有表现出来。
  2. 为什么 jList 允许选择实际上并不存在的索引?

我现在已经使用了两次 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 和它的 selectionmodel 工作原理的人都会明白哪里出了问题。对此的任何帮助表示赞赏。

4

1 回答 1

3

问题很可能是您在将单个项目添加到列表模型fireIntervalAdded(this, 0, list.size())时调用的。签名是:

protected void fireIntervalAdded(Object source, int index0, int index1)

请注意,这index0是添加项目的起始索引,index1是结束索引。因此对于单个项目index0应该是相同的index1。当您使用 调用fireIntervalAdded0, list.size(),您是在告诉 JList 已添加 N 个项目,其中 N= list.size()。因此,JList认为有比您的列表模型中更多的项目。

删除项目时也是如此。

于 2012-04-13T23:15:16.700 回答