Java 制作一个JList滚动到它的末尾';s元素

Java 制作一个JList滚动到它的末尾';s元素,java,swing,jlist,Java,Swing,Jlist,我使用以下代码滚动到JList的末尾。当我在包含JList的窗口上设置Visible以及向JList添加项目时,我会使用它 int lastIndex = getMyList().getModel().getSize() - 1; if (lastIndex >= 0) { getMyList().ensureIndexIsVisible(lastIndex); } 问题在于,在第一次调用setVisible时,JList会无缘无故地向上滚动几个项目。如果随后调用setVisi

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

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

if (lastIndex >= 0) {
    getMyList().ensureIndexIsVisible(lastIndex);
}
问题在于,在第一次调用setVisible时,JList会无缘无故地向上滚动几个项目。如果随后调用setVisible(false),然后再调用setVisible(true),则JList会像预期的那样滚动到底部。我注意到的一件事是,当我打开一扇窗户时,它的一些组件似乎在几分之一秒内被重新排列。所以我猜问题可能就在于此

因此,当我打开其中一个窗口时,我按下了“打印屏幕”,你可以看到,当窗口最初打开时,底部的组件甚至不可见(表情符号和按钮)。下面是窗口“完全打开”时的外观,以及在完全打开前几秒钟的图像

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

调用setVisible()后窗口打开时,我截图显示窗口的外观。


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

尝试封装
ensureIndexIsVisible()
调用
SwingUtilities.invokeLater()

@css对我有用,不知道,用+1Hmmm编辑你的问题,我把范围缩小到在列表中的jlabel中使用html。如果中间的文本跨越多行,则会导致滚动混乱。但我不知道如何修复它。@css只是重复:a)你试过调用器吗?(问题不是在EDT上,而是最后一个在EDT上)b)SSCCE在哪里,所以我们可以试着重现问题?@kleopatra是的,我试过invokeLater。我之前真的在想,你是唯一一个能够弄明白这一点的人,因为你似乎比任何人都更了解swing。我原以为制作一个好的SSCCE会很困难,但我已经把问题缩小到了问题的根源,所以我现在就可以发布一个合适的SSCCE了。但在这个阶段,我已经连续16个小时编写代码,所以我必须先睡一会儿。:-)@kleopatra嗯,我正在写SSCCE,我开始用SSCCE代码测试我现有的代码,我把问题缩小到实际的窗口框架。事实证明,如果在Netbeans属性/代码中选择“生成调整大小代码”(我用它来将窗口居中),然后勾选“生成大小”,则在JList单元格中使用HTML时会导致滚动条混乱。取消勾选“生成大小”修复了问题…花费了这么多时间才找到问题的根源。