2013-10-13 69 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