[英]How to append text on a jtextarea
当我按下按钮时,我想在执行方法之前在JTextArea中显示文本。 我使用jTextArea.append()和jTextArea.settext(),但文本在方法执行后出现。 我的代码:
//...JTextArea jTextArea;
JButton btnGo = new JButton("Start");
btnGo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jTextArea.append("line before\n");
myMethodFromOtherClass();
jTextArea.append("line after\n");
}
}
有什么建议吗?
actionPerformed()方法由处理所有与GUI相关的事件的EDT(事件分派器线程)分派。 在actionPerformed()
方法完成执行之前,不会更新在方法中执行的更新。 若要解决此问题,请在另一个线程中执行myMethodFromOtherClass()
,并在方法在第二个线程中完成执行之后,仅将最终更新事件( jTextArea.append("line after\\n");
) jTextArea.append("line after\\n");
。
对此的粗略演示如下所示:
JButton btnGo = new JButton("Start");
btnGo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//Leave this here
jTextArea.append("line before\n");
//Create new thread to start method in
Thread t = new Thread(new Runnable(){
public void run(){
myMethodFromOtherClass();
//Queue the final append in the EDT's event queue
SwingUtilities.invokeLater(new Runnable(){
public void run(){
jTextArea.append("line after\n");
}
});
}
});
//Start the thread
t.start();
}
}
如果要设计一个更优雅的解决方案,请查看SwingWorker ,它基于非常相似的过程,但具有更多高级功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.