我想以JTextField中的注释形式向用户显示程序流。仅显示最后一条消息("完成")。当我致电setText()
时,如何显示每条消息?
private class CalculateButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
String keyValue = keywordTF.getText();
currentTF.setText("calling 1");
methodCall1();
currentTF.setText("calling 2");
methodCall2();
currentTF.setText("calling 3");
methodCall3();
currentTF.setText("complete");
}
}
答案 0 :(得分:2)
原因是由于您的methodCall*
方法在EDT上运行,因此EDT没有时间重新绘制文本字段。
如果要显示繁重任务的进度,您应该在工作线程上执行繁重的工作并更新EDT上的UI。通常,这是通过使用SwingWorker
或使用工作线程中的SwingUtilities#invokeLater
来实现的。
'Concurrency in Swing'教程包含更多信息
答案 1 :(得分:0)
尝试:
String keyValue = keywordTF.getText();
currentTF.setText("calling 1");
methodCall1();
currentTF.setText(currentTF.getText()+"\ncalling 2");
methodCall2();
currentTF.setText(currentTF.getText()+"\ncalling 3");
methodCall3();
currentTF.setText(currentTF.getText()+"\ncomplete");
效率不高,但它可以完成任务。
同时强>
使用JTextArea
要好得多。 JTextField
主要用于显示一行文本,但听起来您想要保留更多日志...也许?如果您仍想使用JTextField
,请将调用setText()
中的“\ n”字符替换为其他适当的分隔符。