我正在学习在Java Swing中使用列表。在编写一个小型程序以了解使用ListSelectionModel
的ListSelectionEvent
和JList
的工作时,我对getFirstIndex
和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仍处于选中状态,并且其选择未更改,那么firstIndex 0怎样?
考虑到以上几点,firstIndex不应为1,因为那是其选择已更改的第一行(未选择->已选择)?
此外,列表还显示了由其他背景选择的元素。现在,当我进行选择时,它还会显示带有边框的元素?那说明什么呢?
最佳答案
如果选择Element 1
,然后按住Shift键并选择Element 3
,则有从Element 1
到Element 3
的范围选择。 JList
应该为Element 1
,Element 2
和Element 3
呈现蓝色背景(默认选择指示符)。
因此ListSelectionEvent
正确报告当前选择是从索引0到索引2。
这些索引范围表示ListModel
中的元素。ListSelectionModel
以及ListSelectionEvent
报告当前选择,而不是将选择从以前的选择更改为当前选择。