2017-04-21 124 views
0

当用户单击JFrame的红色“X”按钮时,如何检测JFrame是打开还是关闭?我有一个swing定时器,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

看到的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是一个接口,实现接口的第一个具体类是被迫实施其所有的抽象方法。但你实际上只需要一种方法。

使用此方法

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

尽快停止你的定时器的窗口正在关闭用户点击红色的X后

+0

考虑'WindowAdapter',它允许覆盖单个方法。 – trashgod

+0

@DiabolicWords但timer.stop是一个局部变量不是?它如何在windowClosing()内工作?它不知道什么timer.stop()是 – fredjohnson

+0

我已经重新编辑了我的答案。如果你像这样实现计时器,它将在整个课程中都可见。 – DiabolicWords