2009-03-08 1 views
13

Quel type d'écouteur dois-je ajouter à un JFrame pour détecter quand il est caché/montré via setVisible?Evénements de fenêtre pour JFrames masqués/affichés via setVisible?

J'ai essayé d'utiliser un WindowListener et les windowOpened et windowClosed méthodes, mais ils ne fonctionnent que pour la première fois qu'une fenêtre est ouverte (windowOpened) ou, respectivement, lorsque la fenêtre est fermée à l'aide de la méthode dispose (windowClosed) . Cela ne me suffit pas. Je veux être averti chaque fois que la fenêtre est rendue visible et invisible sur l'écran en utilisant setVisible.

Existe-t-il un moyen de pivotement standard pour réaliser ceci, ou dois-je créer le mien (en remplaçant la méthode setVisible par exemple)?

Répondre

21

Essayez un java.awt.event.ComponentListener. Vous pouvez ajouter un en utilisant ce code (où la fenêtre est le nom du 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- Créer une classe qui implémente l'interface ComponentListener, comme l'exemple suivant:

//--------------------- 
    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- Maintenant créer un getter pour votre JFrame comme ceci:

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- être votre principal comme dans l'exemple ci-dessus, vous partirez auditeur JFrame l'auditeur que vous avez créé, puis exécutez le programme, vous verrez mes sages venant de l'auditeur:

Moved 
Resized 
Resized 
Moved 
Shown 
Moved 
Moved