2009-03-08 5 views
13

Welche Art von Listener muss ich einem JFrame hinzufügen, um festzustellen, ob er über setVisible ausgeblendet/angezeigt wird?Fensterereignisse für JFrames, die über setVisible versteckt/angezeigt werden?

ich versuchte, eine Window und die windowOpened und windowClosed Methoden verwenden, aber sie arbeiten nur für die erstmals, dass ein Fenster geöffnet wird (windowOpened) bzw., wenn das Fenster geschlossen wird, unter Verwendung der dispose Methode (windowClosed) . Das ist nicht genug für mich. Ich möchte jedes Mal benachrichtigt werden, wenn das Fenster mit setVisible sichtbar und unsichtbar auf dem Bildschirm angezeigt wird.

Gibt es einen Standard-Swing-Weg, um dies zu erreichen, oder muss ich meinen eigenen (z. B. durch Überschreiben der setVisible-Methode) machen?

Antwort

21

Versuchen Sie einen java.awt.event.ComponentListener. Sie können einen mit diesem Code hinzufügen (wo Fenster der Name des JFrame ist):

window.addComponentListener(new ComponentAdapter() { 
public void componentHidden(ComponentEvent e) 
{ 
    /* code run when component hidden*/ 
} 
public void componentShown(ComponentEvent e) { 
    /* code run when component shown */ 
} 
}); 
1

1- Erstellen Sie eine Klasse, die ComponentListener Schnittstelle, wie das folgende Beispiel implementiert:

//--------------------- 
    import java.awt.event.ComponentEvent; 
    import java.awt.event.ComponentListener; 

    public class winlistenner implements ComponentListener { 

     public void componentHidden(ComponentEvent arg0) { 
      // TODO Auto-generated method stub 
      System.out.print("Hided\r\n"); 

     } 

     public void componentMoved(ComponentEvent arg0) { 
      // TODO Auto-generated method stub 
      System.out.print("Moved\r\n"); 

     } 

     public void componentResized(ComponentEvent arg0) { 
      // TODO Auto-generated method stub 
      System.out.print("Resized\r\n"); 


     } 

     public void componentShown(ComponentEvent arg0) { 
      // TODO Auto-generated method stub 

      System.out.print("Shown\r\n"); 

     } 

} 
//------------------------------------------------------------------------ 

2- Jetzt erstellen einen Getter für Ihre JFrame wie folgt aus:

public class JMain { 

    private JFrame frmNetworkshareMoon; 
    private JTextField textField; 
    private JTextField textField_1; 
    private JTextField textField_2; 

    public JFrame getFrmNetworkshareMoon() { 
     return frmNetworkshareMoon; 
    } 


    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        JMain window = new JMain(); 
        winlistenner listenner= new winlistenner(); 
        window.getFrmNetworkshareMoon().addComponentListener(listenner); 
        window.frmNetworkshareMoon.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 
//...... 
// the rest of your class code: 
//... 
} 

3- Haupt wie im obigen Beispiel zu sein, werden Sie JFrame Hörer den Hörer Sie erstellt haben, und führen Sie dann das Programm eingestellt, werden Sie mes sehen Weise, die vom Zuhörer kommen:

Moved 
Resized 
Resized 
Moved 
Shown 
Moved 
Moved