2017-04-21 3 views
0

Wenn ein Benutzer auf die rote 'X'-Schaltfläche eines JFrames klickt, wie kann ich feststellen, ob der JFrame geöffnet oder geschlossen ist? Ich habe einen Swing-Timer, bei dem der JFrame das Etikett aktualisiert, bis der Benutzer den JFrame schließt.Java - Wie überprüfe ich, ob ein JFrame geschlossen ist

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

siehe WindowStateListener – ControlAltDel

+1

@ControlAltDel könnte man meinen Code ändern und mir zeigen, wie um es bitte zu benutzen? – fredjohnson

+0

@fredjohnson, suchen Sie im Forum nach Beispielen. Sie kennen jetzt den zu suchenden Klassennamen. – camickr

Antwort

0

Sie müssen entweder den WindowStateListener oder den WindowListener implementieren. Wenn Sie die Window verwenden könnte es so aussehen:

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) { } 
} 

Sie müssen implementieren sie alle als Window eine Schnittstelle ist und die erste konkrete Klasse eine Schnittstelle implementiert, ist gezwungen, alle seine abstrakten Methoden zu implementieren. Aber du brauchst eigentlich nur eine Methode.

Verwenden Sie diese Methode

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

Ihre Timer zu stoppen, sobald das Fenster zu schließen, nachdem der Benutzer die roten X.

geklickt
+0

Betrachten Sie 'WindowAdapter', das Überschreiben einzelner Methoden ermöglicht. – trashgod

+0

@DiabolicWords aber timer.stop ist eine lokale Variable nein? Wie würde es innerhalb von windowClosing() funktionieren? Es weiß nicht, was timer.stop() ist – fredjohnson

+0

Ich habe meine Antwort oben redigiert. Wenn Sie den Timer so implementieren, wird er in der gesamten Klasse sichtbar sein. – DiabolicWords

Verwandte Themen