Окно событий для JFrames, которые скрыты/показаны через setVisible?

Какой вид слушателя мне нужно добавить в JFrame для обнаружения, когда он скрыт/показан через setVisible?

Я попытался использовать WindowListener и windowOpened и windowClosed, но они работают только при первом открытии окна (windowOpened) или, соответственно, при закрытии окна с использованием метода dispose (windowClosed). Для меня этого недостаточно. Я хочу получать уведомления каждый раз, когда окно становится видимым и невидимым на экране с помощью setVisible.

Есть ли стандартный способ качания для этого, или мне нужно сделать свой собственный (например, переопределив метод setVisible)?

Ответы

Ответ 1

Попробуйте java.awt.event.ComponentListener. Вы можете добавить один, используя этот код (где window - имя 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 */
}
});

Ответ 2

1- Создайте класс, реализующий интерфейс ComponentListener, как в следующем примере:

    //---------------------
    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- Теперь создайте геттер для вашего JFrame следующим образом:

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 - ваш основной пример, как показано выше, вы установите слушателя JFrame, который вы создали, и затем запустите программу, вы увидите сообщения, поступающие от слушателя:

Moved
Resized
Resized
Moved
Shown
Moved
Moved