我看着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] 删除。
我来说两句