2012-03-27 43 views
3

我正在使用以下代碼滾動到JList的末尾。當我在包含JList的窗口上設置可見性並將項添加到JList時,我使用它。使JList滾動到其元素的末尾

int lastIndex = getMyList().getModel().getSize() - 1; 

if (lastIndex >= 0) { 
    getMyList().ensureIndexIsVisible(lastIndex); 
} 

問題是,在第一次調用setVisible時,JList向上滾動了一些沒有明顯原因的項。如果我然後調用setVisible(false),然後調用setVisible(true),那麼JList會像它應該那樣滾動到底部。我注意到的一件事是,當我打開一個窗口時,它的一些組件似乎在幾秒鐘內重新排列。所以我猜這個問題可以歸結爲這個。

因此,當我打開其中一個窗口時,按下「打印屏幕」,您可以看到當窗口最初打開時,底部的組件甚至不可見(表情符和按鈕)。這是窗口在「完全打開」時的樣子,以及在完全打開之前幾分之一秒的樣子。

窗口的樣子,一旦它被打開(你可以看到滾動條是不是在底部)時,我截圖,因爲它是要調用setVisible呼叫後打開 enter image description here

如何在窗口的外觀() enter image description here

因此,任何人知道爲什麼佈局變化的窗口正在打開,我怎麼可以讓我的JList滾動到它第一次打開時的底部?

回答

6

嘗試以包裹ensureIndexIsVisible()呼叫SwingUtilities.invokeLater()

+0

我已經擁有它在事件分派線程 – csss 2012-03-27 05:59:00

+0

我@csss的作品,沒想到,編輯與[SSCCE]你的問題(http://sscce.org/ )+1 – mKorbel 2012-03-27 06:34:23

+0

嗯,我把它縮小到使用列表中的jlabels中的html。如果中間的文字跨越多行,則會導致滾動亂七八糟。不知道如何解決它。 – csss 2012-03-27 07:20:30