Swing对firstIndex和lastIndex的混淆

时间:2013-10-13 11:01:53

标签: java swing listselectionlistener

我正在学习使用Java Swing中的列表。在编写一个小程序以了解ListSelectionModelListSelectionEvent使用JList的工作时,我对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. 元素1仍然被选中且其选择没有改变,那么firstIndex 0是怎么回事?

  2. 保持上述观点,firstIndex不应为1,因为那是选择已更改的第一行(未选中 - >已选中)?

  3. 此外,该列表显示由不同背景选择的元素。现在当我做出选择时,它还会显示带边框的元素?这表明了什么?

1 个答案:

答案 0 :(得分:2)

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

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

中的元素

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