【发布时间】:2012-04-10 15:15:57
【问题描述】:
我正在使用以下代码滚动到 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 在第一次打开时滚动到底部?
【问题讨论】: