0

プログラム フローを 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");
    }
}
4

2 に答える 2

2

その理由は、methodCall*メソッドが EDT で実行されているため、EDT がテキスト フィールドを再描画する時間がないためです。

負荷の高いタスクの進行状況を表示する場合は、ワーカー スレッドで負荷の高い作業を実行し、EDT で UI を更新する必要があります。通常、これはワーカー スレッドからSwingWorkerまたは を使用して実現されます。SwingUtilities#invokeLater

Concurrency in Swing」チュートリアルには、より多くの情報が含まれています。

于 2012-05-15T15:48:30.700 に答える
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");

それほど効率的ではありませんが、仕事は完了します。

また

を使用する方がずっと良いでしょうJTextAreaJTextFieldは主に 1 行のテキストを表示することを目的としていますが、もっと多くのログを保持したいように思えます... おそらく? それでも を使用したい場合はJTextField、 への呼び出しの "\n" 文字をsetText()他の適切な区切り文字に置き換えます。

于 2012-05-15T15:43:07.377 に答える