【发布时间】:2013-02-26 15:21:48
【问题描述】:
注意:我正在重新提出this 的问题,因为我需要一个答案,而那里的答案链接已断开。
我正在编写一个简单的聊天程序,作为学校项目的一部分,我希望用户能够自动跟踪消息(如果它们位于底部),而不必担心再次向上滚动如果他们正在寻找更高的东西。目前,无论如何,我的代码都只是滚动到底部。基本代码如下,我真的不知道如何将其转换为 SSCCE。如果有人可以,请随时这样做。
JTextArea jta = new JTextArea(50, 50);
JScrollPane scroll = new JScrollPane(jta);
try {
int iter = 0;
while (true) { //Not a for loop because it should not end after x iterations
Thread.sleep(500);
jta.append("Test text #" + iter);
iter++;
//Check if they are at the bottom and if so scroll down to the new bottom.
}
} catch (InterruptedException ex) {
System.out.println("Error!");
}
【问题讨论】:
-
最好在链接断开的答案下留下评论,询问回答者可以修复链接/提供另一个示例。
-
如果您打算稍后分享您的发现,您为什么要现在发布问题?顺便说一句,您是否尝试了解发布代码背后的想法?
-
为了更好的帮助,请尽快发布SSCCE,简短,可运行,可编译,不是代码剪切导致锁定事件调度线程,更多在 Oracles 教程 Concurency in Swing
-
啊,我刚刚看到您确实在原始答案下留下了评论。但我认为该答案的作者应该得到比 17 分钟多一点的时间。从那时起他/她甚至都无法保证一直在线,更不用说找到一个有解决方案的新帖子了。
-
旁注:
JTextArea和JScrollPane的创建必须在事件调度线程 (EDT) 上进行。在 EDT 上有一个while(true)循环将阻止该线程,这将确保您永远看不到您附加的文本。最好为此代码使用javax.swing.Timer。也不再记录append是线程安全的,这使得 SwingTimer成为更好的选择
标签: java swing concurrency jscrollpane jtextarea