我使用以下代码滚动到JList的末尾。当我在包含JList的窗口上setVisible时以及在向JList添加项目时使用它。
int lastIndex = getMyList().getModel().getSize() - 1;
if (lastIndex >= 0) {
getMyList().ensureIndexIsVisible(lastIndex);
}
问题是,在第一次调用setVisible时,JList无缘无故地滚动了几个项目。如果我然后调用setVisible(false),然后调用setVisible(true),则JList会像它应该的那样滚动到底部。我注意到的一件事是,当我打开一个窗口时,它的一些组件似乎在几分之一秒内重新排列。所以我猜这个问题可能就是这个问题。
当我打开其中一个窗口时,我按下“打印屏幕”,你可以看到,当窗口最初打开时,它底部的组件甚至都不可见(表情符号和按钮)。这是窗口在“完全打开”时的样子,以及它在完全打开之前的几分之一秒的样子。
窗口打开后的外观(您可以看到滚动条不在底部)
当我在调用setVisible()后打开它时,我的屏幕截图如何
所以任何人都知道为什么布局在窗口打开时会发生变化,以及如何在首次打开时让我的JList滚动到底部?
答案 0 :(得分:6)
尝试在ensureIndexIsVisible()
SwingUtilities.invokeLater()
来电