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

时间:2009-03-08 00:35:32

标签: java swing events

我需要将哪种类型的听众添加到JFrame以检测何时隐藏或通过setVisible显示?

我尝试使用WindowListener以及windowOpenedwindowClosed方法,但它们只适用于第一次打开一个窗口({{ 1}})或者,分别在使用dispose方法(windowOpened)关闭窗口时。这对我来说还不够。我希望每次使用windowClosed在屏幕上显示和隐藏窗口时都会收到通知。

是否有标准的Swing方法来实现这一目标,或者我是否需要自己创建(通过,例如,覆盖setVisible方法)?

2 个答案:

答案 0 :(得分:28)

尝试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 */
   }
});

答案 1 :(得分: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创建一个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