我有一个由JFrame启动的JDialog。这个Dialog里面有一个JScrollPane,在使用' true'来调用JDialog的setVisible函数之前添加了一些内容。
我的问题是,添加内容会导致Scrollbars在调用setVisible时更改其位置。由于setVisible是阻塞的,我无法进行任何调用以在setVisible之后更改滚动条的值。
我不想使用invokeLater,因为它的功能在时间上是不确定的(如果没有其他方法,很好,但我不喜欢'当你讨好时这样做'如果我可以避免它。)
有没有办法确保不使用invokeLater而不依赖于用户交互的post-setVisible调用?
答案 0 :(得分:0)
这应该有用。
private void scrollTo(final JComponent viewToScroll, final Rectangle bounds) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
viewToScroll.scrollRectToVisible(bounds);
}
});
}
但是,如果您希望稍微调整执行顺序和计时,则可以在将viewToScroll组件添加到父层次结构(HierarchyListener.hierarchyChanged)时进行侦听,然后调用上述方法(然后删除侦听器)。