调用setVisible后设置Scrollbar值? (不使用invokeLater)

时间:2014-09-15 20:39:30

标签: java swing scrollbar blocking jdialog

我有一个由JFrame启动的JDialog。这个Dialog里面有一个JScrollPane,在使用' true'来调用JDialog的setVisible函数之前添加了一些内容。

我的问题是,添加内容会导致Scrollbars在调用setVisible时更改其位置。由于setVisible是阻塞的,我无法进行任何调用以在setVisible之后更改滚动条的值。

我不想使用invokeLater,因为它的功能在时间上是不确定的(如果没有其他方法,很好,但我不喜欢'当你讨好时这样做'如果我可以避免它。)

有没有办法确保不使用invokeLater而不依赖于用户交互的post-setVisible调用?

1 个答案:

答案 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)时进行侦听,然后调用上述方法(然后删除侦听器)。