自动滚动到滚动窗格的底部

时间:2017-03-25 13:57:05

标签: java scroll

我查看了Scroll JScrollPane to bottom并找到了答案=>

JScrollBar vertical = scrollPane.getVerticalScrollBar();
vertical.setValue( vertical.getMaximum() );

工作得非常好。

然而,当有大量输出时,它不会直接到底。

我现在添加了一个延迟(不是来自EWT),然后是EWT中的另一个更新,它可以解决问题。

    Thread thread = Thread.currentThread();
        try {
            thread.sleep(99);
        } catch (InterruptedException ex) {
    }
    SwingUtilities.invokeLater(new Runnable() {
        public void run() { log(""); }
    });

1 个答案:

答案 0 :(得分:0)

  

是否有一种简单的方法可以等待所有输出调用完成?

不知道你到底在做什么,但通常你不想使用Thread.sleep(...)。

相反,您可以将代码包装在SwingUtilities.invokeLater(...)中。这将把代码放在Event Dispatch Thread(EDT)的末尾,这样它就可以在其他处理完成后执行。

SwingUtilities.invokeLater(new Runnable()
{
    public void run()
    {
        JScrollBar vertical = scrollPane.getVerticalScrollBar();
        vertical.setValue( vertical.getMaximum() );
    }
});

阅读Concurrency in Swing上Swing教程中的部分,了解有关EDT及其重要性的更多信息。

对于您的代码,更好的解决方案是使用教程中描述的SwingWorker