0

私のJFrameでは、いくつかのタスクを実行するためにループします。JFrameタイトルのステータスを確認したいので、次のようなものがあります。

frame.setTitle("現在のステータス["+ Auto_Count_Id + "/" + Auto_Count_Total + "]");

しかし、私が必要としているように、それは塗り直しではありません。だから私は次のことを試しました:

<1>

    SwingUtilities.invokeLater(new Runnable() 
    {
      public void run()
      {
        frame.setTitle("Current status [ "+Auto_Count_Id+"/"+Auto_Count_Total+" ]");
      }
    });

    <2>
    // repaint(long time, int x, int y, int width, int height) 
    frame.repaint(10,0,0,500,300) 

それらも機能しません。タスクが終了した後にのみ再描画します。どうすればよいですか?

4

3 に答える 3

3

Swingのイベントスレッドで重い作業を行わないでください。Swingがそのスレッドを使用してGUIを再描画できるように、計算用の新しいスレッドを作成します。

于 2009-03-19T22:12:06.070 に答える
0

そうです、SwingWorker が最適です。

Java 6 を使用している場合は、publish() および process() メソッドを含むバージョンの SwingWorker が付属しています。これらのメソッドは、実行時間の長いタスクを実行しているときにデータを公開し、そのデータをイベント ディスパッチ スレッドで公開できるようにするためのものです。

できることは、長時間実行されるタスクが定義された SwingWorker サブクラスを作成することです。次に、その実行時間の長いタスク内で、publish() メソッドを使用して JFrame タイトル文字列を公開します。process メソッドを上書きして、JFrame のタイトルを設定します。

Java 6 の SwingWorker API ドキュメントは次のとおりです。

于 2009-03-20T17:15:26.043 に答える
0

SwingWorkerクラスを見てください。

于 2009-03-19T22:30:33.733 に答える