我正在学习在Java Swing中使用列表。在编写一个小型程序以了解使用ListSelectionModelListSelectionEventJList的工作时,我对getFirstIndexgetLastIndex给出的值感到困惑。

每个文档都说-

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仍处于选中状态,并且其选择未更改,那么firstIndex 0怎样?
考虑到以上几点,firstIndex不应为1,因为那是其选择已更改的第一行(未选择->已选择)?


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

最佳答案

如果选择Element 1,然后按住Shift键并选择Element 3,则有从Element 1Element 3的范围选择。 JList应该为Element 1Element 2Element 3呈现蓝色背景(默认选择指示符)。

因此ListSelectionEvent正确报告当前选择是从索引0到索引2。
这些索引范围表示ListModel中的元素。

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

10-05 19:13