使JList滚动到它的元素的末尾

时间:2012-03-27 05:06:33

标签: java swing jlist

我使用以下代码滚动到JList的末尾。当我在包含JList的窗口上setVisible时以及在向JList添加项目时使用它。

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

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

问题是,在第一次调用setVisible时,JList无缘无故地滚动了几个项目。如果我然后调用setVisible(false),然后调用setVisible(true),则JList会像它应该的那样滚动到底部。我注意到的一件事是,当我打开一个窗口时,它的一些组件似乎在几分之一秒内重新排列。所以我猜这个问题可能就是这个问题。

当我打开其中一个窗口时,我按下“打印屏幕”,你可以看到,当窗口最初打开时,它底部的组件甚至都不可见(表情符号和按钮)。这是窗口在“完全打开”时的样子,以及它在完全打开之前的几分之一秒的样子。

窗口打开后的外观(您可以看到滚动条不在底部) enter image description here

当我在调用setVisible()后打开它时,我的屏幕截图如何 enter image description here

所以任何人都知道为什么布局在窗口打开时会发生变化,以及如何在首次打开时让我的JList滚动到底部?

1 个答案:

答案 0 :(得分:6)

尝试在ensureIndexIsVisible()

中封送SwingUtilities.invokeLater()来电