1

我正在学习在 Java Swing 中使用列表。在编写一个小程序来理解 的工作ListSelectionModelListSelectionEvent使用JList时,我对getFirstIndexand给出的值感到困惑getLastIndex

每个人的文档都说 -

getFirstIndex

返回其选择可能已更改的第一行的索引。

getLastIndex

返回其选择可能已更改的最后一行的索引。

现在假设我有一个这样的列表(允许单范围选择) -

Element 1
Element 2
Element 3
Element 4
Element 5

最初,没有选择。现在,我选择了 1,firstIndex 给出了 0,lastIndex 给出了 0,这是正确的。

现在,我按住 shift 并选择 3。这里,firstIndex 给出了 0,lastIndex 给出了 2。lastIndex 很好,但我对 firstIndex 的值有一些疑问 -

  1. 元素 1 仍然被选中并且它的选择没有改变,那么 firstIndex 0 怎么样?

  2. 考虑到上述观点,firstIndex 不应该为 1,因为这是选择已更改的第一行(未选择 -> 已选择)?

此外,该列表显示由不同背景选择的元素。现在,当我进行选择时,它还会显示带有边框的元素?那说明什么?

4

1 回答 1

2

如果您选择Element 1然后按住 shift 键并选择,则您有一个从到Element 3的范围选择。应该为 和渲染蓝色背景(默认选择指示器)。Element 1Element 3JListElement 1Element 2Element 3

因此,ListSelectionEvent正确报告当前选择是从索引 0 到索引 2。这些索引范围代表您的ListModel.

ListSelectionModel以及报告当前选择而ListSelectionEvent不是选择从先前选择更改为当前选择。

于 2013-10-13T11:05:24.470 回答