schweerelos
schweerelos

Reputation: 2189

Window events for JFrames that are hidden/shown via setVisible?

Which kind of listener do I have to add to a JFrame to detect when it is being hidden or shown via setVisible?

I tried using a WindowListener and the windowOpened and windowClosed methods, but they only work for the first time that a window is opened (windowOpened) or, respectively, when the window is closed using the dispose method (windowClosed). That is not enough for me. I want to be notified every time the window is made visible and invisible on the screen using setVisible.

Is there a standard Swing way to achieve this, or do I need to make my own (by, say, overriding the setVisible method)?

Upvotes: 16

Views: 14218

Answers (2)

James
James

Reputation: 1041

Try a java.awt.event.ComponentListener. You can add one using this code (where window is the name of the 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 */
   }
});

Upvotes: 29

Desphilboy
Desphilboy

Reputation: 1009

1- Create a class that implements ComponentListener Interface, Like the following example:

    //---------------------
    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- Now create a getter for your JFrame like this:

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- being your main like the above example, you will set JFrame listener the listener you created, and then run the program, you will see messages coming from the listener:

Moved
Resized
Resized
Moved
Shown
Moved
Moved

Upvotes: 3

Related Questions