只有最后一次调用TextField才会更新它

时间:2012-05-15 15:39:44

标签: java swing textfield

我想以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");
    }
}

2 个答案:

答案 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”字符替换为其他适当的分隔符。