2009-03-08 10 views
13

Quale genere di listener devo aggiungere a un JFrame per rilevare quando viene nascosto/mostrato tramite setVisible?Eventi finestra per JFrames che sono nascosti/visualizzati tramite setVisible?

Ho provato ad utilizzare un WindowListener ei windowOpened e windowClosed metodi, ma funzionano solo per la prima volta che viene aperta una finestra (windowOpened) o, rispettivamente, quando la finestra è chiusa con il metodo dispose (windowClosed) . Questo non è abbastanza per me. Desidero ricevere una notifica ogni volta che la finestra viene resa visibile e invisibile sullo schermo utilizzando setVisible.

Esiste un modo standard per ottenere questo risultato oppure è necessario crearne uno (ad esempio, ignorando il metodo setVisible)?

risposta

21

Provare un java.awt.event.ComponentListener. È possibile aggiungere una utilizzando questo codice (in cui finestra è il nome del JFrame):

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- Creare una classe che implementa l'interfaccia ComponentListener, come il seguente esempio:

//--------------------- 
    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- Ora creare un getter per la vostra JFrame come questo:

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- essere il principale come l'esempio di cui sopra, si imposterà JFrame ascoltatore l'ascoltatore si è creato, e quindi eseguire il programma, si vedrà mes saggi provenienti dall'ascoltatore:

Moved 
Resized 
Resized 
Moved 
Shown 
Moved 
Moved 
Problemi correlati