2013-10-13 65 views
1

我正在学习在Java Swing中使用列表。在写一个小程序来了解ListSelectionModelListSelectionEvent使用JList的工作时,我对getFirstIndexgetLastIndex给出的值感到困惑。摆动关于firstIndex和lastIndex的混淆

每个说的文档 -

getFirstIndex

返回的第一行,其选择可能已经改变的指标。

getLastIndex

返回的最后一排,其选择可能已经改变的指标。

现在可以说,我有一个这样的列表(允许单范围内选择) -

Element 1 
Element 2 
Element 3 
Element 4 
Element 5 

最初,没有一个是selected.Now,我选择1和firstIndex了0,lastIndex的给0,是正确的。

现在,我按住Shift键并选择3。在这里,firstIndex了0和lastIndex的给2 lastIndex的是好的,但我有一个关于firstIndex值的几个问题 -

  1. 件1仍然选中并且其选择没有改变,那么firstIndex如何0?

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

此外,该列表显示了由不同背景选择的元素。现在当我做出选择时,它也显示了带有边框的元素?这是什么意思?

回答

2

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

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

ListSelectionModel以及ListSelectionEvent报告当前的选择而不是选择从先前的选择改变到当前。

+0

好的。但是,让我说我保持这种选择。现在,保持Shift按下,我选择元素4.然后firstIndex返回2和lastIndex 3.不应该是0-3? – Cygnus

+0

我不能再现问题。如果我选择第一个列表元素,请按住shift键并选择第三个列表元素。然后选择1 2 3。如果我一直按住shift键并选择4.比选择1 2 3 4。我尝试了这个示例应用程序http://docs.oracle。com/javase/tutorial/uiswing/events/listselectionlistener.html –

+0

不,你误解了我。我说的是,选择很好 - 我看到1,2,3,4被选中。但firstIndex返回2和lastIndex 3,而不是0和3。 – Cygnus