2017-04-21 27 views
0

JFrameの赤い「X」ボタンをクリックすると、JFrameが開いているか閉じているかをどのように検出できますか?私は、ユーザーがJFrameを閉じるまでJFrameがラベルを更新し続けるスイングタイマーを持っています。Java - JFrameが閉じられているかどうかを確認するには

int delay = 1000;   //milliseconds  

final Timer timer = new Timer(delay, null); 
timer.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent evt) { 
     tempLabel.setVisible(true); 
     String tmp = "test";       
     tempLabel.setText("Temperature : " + tmp); 
     // timer.stop(); 
    } 
}); 

timer.start(); 
+1

赤いXをクリックした後、ウィンドウが閉じているとして、あなたのタイマーを停止する

このメソッドを使用し

public void windowClosing(WindowEvent e) { timer.stop(); } 

は、あなたが私のコードを変更し、どのように私を見ることができのWindowStateListener – ControlAltDel

+1

@ControlAltDelを見ますそれを使用するには? – fredjohnson

+0

@fredjohnson、例をフォーラムで検索してください。検索するクラス名が分かりました。 – camickr

答えて

0

WindowStateListenerまたはWindowListenerのいずれかを実装する必要があります。あなたがいるWindowListenerを使用する場合には、次のようになります。

import java.awt.event.WindowEvent; 
import java.awt.event.WindowListener; 
import javax.swing.Timer; 

public class Foo implements WindowListener { 

    private Timer timer; 

    public static void main(String args[]){ 
     initTimerComponent(); 
    } 

    private void initTimerComponent() { 
     int delay = 1000;   //milliseconds  

     timer = new Timer(delay, null); 
     timer.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
      tempLabel.setVisible(true); 
      String tmp = "test";       
      tempLabel.setText("Temperature : " + tmp); 
      } 
     }); 

     timer.start(); 
    } 

    @Override 
    public void windowOpened(WindowEvent e) { } 

    @Override 
    public void windowClosing(WindowEvent e) { 
     timer.stop(); 
    } 

    @Override 
    public void windowClosed(WindowEvent e) { } 

    @Override 
    public void windowIconified(WindowEvent e) { } 

    @Override 
    public void windowDeiconified(WindowEvent e) { } 

    @Override 
    public void windowActivated(WindowEvent e) { } 

    @Override 
    public void windowDeactivated(WindowEvent e) { } 
} 

あなたはいるWindowListenerはインタフェースであり、インタフェースを実装する最初の具体的なクラスは、そのすべての抽象メソッドを実装することを余儀なくされたとして、それらのすべてを実装する必要があります。しかし、実際には1つの方法しか必要ありません。すぐにユーザーが

+0

個々のメソッドをオーバーライドできる 'WindowAdapter'を考慮してください。 – trashgod

+0

@DiabolicWordsしかし、timer.stopはローカル変数ではありませんか? windowClosing()の内部ではどのように動作しますか?それはtimer.stop()が – fredjohnson

+0

であるかわからない上記の私の答えを再編集しました。このようにタイマーを実装すると、クラス全体で表示されます。 – DiabolicWords

関連する問題