2009-03-08 10 views
13

Jaki rodzaj słuchacza muszę dodać do ramki JFrame, aby wykryć, kiedy jest ona ukryta/wyświetlana przez setVisible?Zdarzenia okien dla JFrames, które są ukryte/wyświetlane za pomocą setVisible?

Próbowałem przy użyciu WindowListener i metod windowOpened i windowClosed, ale działają one tylko po raz pierwszy że okno jest otwarte (windowOpened) lub, odpowiednio, gdy okno jest zamknięte stosując metodę Dispose (windowClosed) . To mi nie wystarcza. Chcę otrzymywać powiadomienia za każdym razem, gdy okno jest widoczne i niewidoczne na ekranie przy użyciu setVisible.

Czy istnieje standardowy sposób, aby to osiągnąć, czy też muszę wykonać własne (np. Przesłonięcie metody setVisible)?

Odpowiedz

21

Wypróbuj element java.awt.event.ComponentListener. Możesz dodać jeden przy użyciu tego kodu (gdzie okno jest nazwą 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- Tworzenie klasy, która implementuje interfejs ComponentListener, jak w poniższym przykładzie:

//--------------------- 
    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- teraz utworzyć getter dla JFrame tak:

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- będąc głównym jak powyższy przykład, można ustawić JFrame słuchaczowi utworzony słuchacza, a następnie uruchomić program, widać mes mędrcy pochodzący od słuchacza:

Moved 
Resized 
Resized 
Moved 
Shown 
Moved 
Moved 
Powiązane problemy