2017-12-19 8 views
-2

私はいくつかのシャットダウンステップを持っています。これらのシャットダウンステップは、処理する前にWindowClosingイベント中に実行する必要があります。すべて正常に実行されていますが、閉じるJFrame内の既存のJLabelにシャットダウンステータスメッセージを提供する機能を追加したいと思います。 WindowClosingイベント中にJLabelのテキストを更新することは可能ですか?WindowClosingイベント中にJFrameオブジェクトを更新するにはどうすればよいですか?

+0

「JFrame」の終了動作に影響を与える方法については、[この回答](https://stackoverflow.com/a/7073630/418556)を参照してください。 –

+0

WindowClosingイベント中にその回答がJFrameコンポーネントに更新を送信する場所がわかりません。 – Steve

答えて

0

シャットダウンステップをバックグラウンドで実行してからJFrameを閉じるために、次のコードを使用しました。

frame.addWindowListener(new WindowAdapter() { 
    @Override 
    public void windowClosing(WindowEvent e) {  
     SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() { 
      @Override 
      public Void doInBackground() { 

       // shutdown steps go here and can update the JLabel text 

       frame.dispose(); 
       return null; 
      } 
     }; 
     worker.execute(); 
    } 
}); 
0

コンポーネントとの対話を開始する前に、コンポーネントが削除されていないことを確認してください。

SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
      // update label here 
    } 
}); 
+0

JFrameは、WindowClosingイベント中にフリーズまたはサスペンドされるため、コンパニオンのアップデートは表示されません。 – Steve

+0

私の前のコメントが更新されました。 –

0

が、私は終値内の既存のJLabelにシャットダウン・ステータス・メッセージを提供する機能を追加したいが

label.setText(....); 
label.paintImmediately(label.getBounds()); 

をJFrameのリスナーのコードはイベントディスパッチ上で実行

GUIはすべてのリスナーコードが実行されるまでGUI自体を再描画することができないので、GUIが閉じられます。

paintImmediately(...)は、コンポーネントがRepaintManagerをバイパスし、すぐにペイントすることを許可します。

+0

あなたの説明は理にかなっていますが、私はpaintImmediatelyを使ってみました。終了イベントの内部では、フレームはまだ更新されません。 – Steve

関連する問題