События окна для JFrames, которые скрыты / показаны через setVisible? - PullRequest
16 голосов
/ 08 марта 2009

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

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

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

Ответы [ 2 ]

29 голосов
/ 08 марта 2009

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...