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

鲍勃

我看着Scroll JScrollPane 到底部,找到了答案 =>

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(""); }
    });
卡米克

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

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

相反,您可以将代码包装在SwingUtilities.invokeLater(...). 这会将代码放在事件调度线程 (EDT) 的末尾,以便在其他处理完成后执行。

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

阅读 Swing 中关于并发性的 Swing 教程中的部分,了解有关 EDT 的更多信息以及为什么这很重要。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章