2009-03-08 5 views
13

¿Qué tipo de oyente tengo que agregar a un JFrame para detectar cuándo se oculta/se muestra a través del setVisible?Eventos de ventana para JFrames que están ocultos/se muestran a través de setVisible?

He intentado utilizar un WindowListener y los métodos windowOpened y windowClosed, pero sólo funcionan para la primera vez que se abre una ventana (windowOpened) o, respectivamente, cuando se cierra la ventana utilizando el método dispose (windowClosed) . Eso no es suficiente para mí. Quiero recibir una notificación cada vez que la ventana se hace visible e invisible en la pantalla usando setVisible.

¿Existe una manera estándar de lograr esto, o tengo que hacer la mía (por ejemplo, anulando el método setVisible)?

Respuesta

21

Pruebe un java.awt.event.ComponentListener. Se pueden añadir uno usando este código (en el que la ventana es el nombre 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- Crear una clase que implementa la interfaz ComponentListener, como el siguiente ejemplo:

//--------------------- 
    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- Ahora crear un captador para su JFrame como esto:

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- siendo su principal como el ejemplo anterior, establecerá JFrame escucha el oyente que ha creado, y luego ejecutar el programa, verá MES sabios provenientes del oyente:

Moved 
Resized 
Resized 
Moved 
Shown 
Moved 
Moved 
Cuestiones relacionadas