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

css*_*sss 3 java swing jlist

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

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

if (lastIndex >= 0) {
    getMyList().ensureIndexIsVisible(lastIndex);
}
Run Code Online (Sandbox Code Playgroud)

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

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

窗口打开后的外观(您可以看到滚动条不在底部) 在此输入图像描述

在调用setVisible()后,当我打开它时,窗口看起来如何 在此输入图像描述

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

Sta*_*avL 6

尝试将ensureIndexIsVisible()呼叫包围起来SwingUtilities.invokeLater()