通过 setVisible 隐藏/显示的 JFrame 的窗口事件?

2022-09-03 00:30:36

我必须将哪种类型的侦听器添加到 中以检测何时隐藏或通过以下方式显示?JFramesetVisible

我尝试使用a和windowsOpen和windowClosed方法,但它们仅在打开窗口()时首次工作,或者分别在使用dispose方法()关闭窗口时起作用。这对我来说还不够。我希望每次使用 在屏幕上显示窗口和不可见时都收到通知。WindowListenerwindowOpenedwindowClosedsetVisible

有没有一种标准的Swing方法来实现这一点,或者我是否需要制作自己的方法(比如说,通过覆盖该方法)?setVisible


答案 1

尝试 .您可以使用以下代码添加一个(其中窗口是 的名称):java.awt.event.ComponentListenerJFrame

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 Interface 的类,如以下示例所示:

    //---------------------
    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创建一个getter,如下所示:

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