java中的窗口事件包括:

1,windowActivated窗口激活(获取焦点)

2,windowDeactivated窗口失活(失去焦点)

3,windowClosed窗口关闭 (dispose方法被显式调用用来释放资源时响应)

4,windowClosing窗口正在关闭(用户试图通过关闭按钮关闭窗口时)

5,windowIconified窗口图标化 (最小化窗口)

6,windowDeiconified窗口取消图标化(从最小化还原窗口)

7,windowOpened窗口打开(窗口首次显示时)

以上七种窗口事件可通过继承WindowAdapter重写需要的方法或者实现WindowListener接口并按需要实现相应的方法即可。由于java不支持多继承,而窗体类一般都须继承自JFrame,所以往往采用第二种方法,即通过实现接口的方法来监测窗口事件。

窗口还有一些比较常用的事件比如 窗口移动(moved),窗口隐藏(hidden或者setVisible(false)),窗口恢复显示(setVisible(true)),窗口尺寸改变(Resized)。这些事件可通过实现ComponentListener接口来进行检测的。 在ComponentListener接口中定义了一下四个方法:

1,componentMoved组件移动

2,componentHidden组件隐藏(每次调用setVisible(false)时响应

3,componentShown组件显示 (可能是第一次也可能不是,每次调用setVisible(true)时响应

4,componentResized组件尺寸改变

以上四个组件事件是针对所有组件的,不仅仅限于窗口

此外,还可通过继承MouseListener来响应鼠标事件

在Swing窗体JFrame中有一个方法可以用来最小化以及还原窗口的方法 -- setState(int state); 或者 setExendedState

jframe.setState(JFrame.ICONIFIED);//最小化窗口

jframe.setState(JFrame.NORMAL);//还原窗口

下面的例子实现了以下功能

两个窗口,一个主窗口,一个副窗口

1,移动主窗口,副窗口会跟着主窗口移动。

2,最小化主窗口,副窗口也最小化;恢复主窗口,副窗口也恢复。

3,检测windowClosing事件,并给出提醒。

4,检测windowClosed事件,输出一句话到控制台。

效果很简单:

源码:

import java.awt.FlowLayout;\\r\\nimport java.awt.Point;\\r\\nimport java.awt.Toolkit;\\r\\nimport java.awt.event.ActionEvent;\\r\\nimport java.awt.event.ActionListener;\\r\\nimport java.awt.event.ComponentEvent;\\r\\nimport java.awt.event.ComponentListener;\\r\\nimport java.awt.event.WindowEvent;\\r\\nimport java.awt.event.WindowListener;\\r\\n\\r\\nimport javax.swing.JButton;\\r\\nimport javax.swing.JFrame;\\r\\nimport javax.swing.JOptionPane;\\r\\n\\r\\npublic class MainFrame extends JFrame implements ComponentListener,\\r\\n               WindowListener {\\r\\n       public static final int SIZE\_X = 400;\\r\\n       public static final int SIZE\_Y = 400;\\r\\n       public static final int LOC\_X = (Toolkit.getDefaultToolkit()\\r\\n                       .getScreenSize().width - SIZE\_X) / 2;\\r\\n       public static final int LOC\_Y = (Toolkit.getDefaultToolkit()\\r\\n                       .getScreenSize().height - SIZE\_Y) / 2;\\r\\n\\r\\n       MinorFrame minorFrame;\\r\\n       JButton ShowBtn;\\r\\n\\r\\n       public MainFrame() {\\r\\n               super();\\r\\n\\r\\n               this.minorFrame = new MinorFrame();\\r\\n\\r\\n               setTitle("Main Frame");\\r\\n               setLayout(new FlowLayout());\\r\\n\\r\\n               add(getShowBtn());\\r\\n\\r\\n               addComponentListener(this);\\r\\n               addWindowListener(this);\\r\\n\\r\\n               setBounds(LOC\_X, LOC\_Y, SIZE\_X, SIZE\_Y);\\r\\n               setVisible(true);\\r\\n               setResizable(false);\\r\\n               setDefaultCloseOperation(DO\_NOTHING\_ON\_CLOSE);\\r\\n       }\\r\\n\\r\\n       private JButton getShowBtn() {\\r\\n               // TODO Auto-generated method stub\\r\\n               if (ShowBtn == null) {\\r\\n                       ShowBtn = new JButton("Show");\\r\\n               }\\r\\n               ShowBtn.addActionListener(new ActionListener() {\\r\\n\\r\\n                       @Override\\r\\n                       public void actionPerformed(ActionEvent arg0) {\\r\\n                               // TODO Auto-generated method stub\\r\\n                               if (!minorFrame.isVisible()) {\\r\\n                                       minorFrame.setVisible(true);\\r\\n                               }\\r\\n                               minorFrame.setState(JFrame.NORMAL);\\r\\n                       }\\r\\n               });\\r\\n               return ShowBtn;\\r\\n       }\\r\\n\\r\\n       public static void main(String args\[\]) {\\r\\n               new MainFrame();\\r\\n       }\\r\\n\\r\\n       @Override\\r\\n       public void windowActivated(WindowEvent arg0) {\\r\\n               // TODO Auto-generated method stub\\r\\n\\r\\n       }\\r\\n\\r\\n       @Override\\r\\n       public void windowClosed(WindowEvent arg0) {\\r\\n               // TODO Auto-generated method stub\\r\\n\\r\\n               System.out.println("Windows Closed!");\\r\\n       }\\r\\n\\r\\n       @Override\\r\\n       public void windowClosing(WindowEvent arg0) {\\r\\n               // TODO Auto-generated method stub\\r\\n\\r\\n               if (JOptionPane.OK\_OPTION == JOptionPane.showConfirmDialog(this,\\r\\n                               "Are you sure to close the window?", "Window Closing...",\\r\\n                               JOptionPane.OK\_CANCEL\_OPTION)) {\\r\\n                       minorFrame.dispose();\\r\\n                       this.dispose();\\r\\n                       // System.exit(0);\\r\\n               }\\r\\n       }\\r\\n\\r\\n       @Override\\r\\n       public void windowDeactivated(WindowEvent arg0) {\\r\\n               // TODO Auto-generated method stub\\r\\n\\r\\n       }\\r\\n\\r\\n       @Override\\r\\n       public void windowDeiconified(WindowEvent arg0) {\\r\\n               // TODO Auto-generated method stub\\r\\n               if (minorFrame.isVisible()) {\\r\\n                       minorFrame.setState(JFrame.NORMAL);\\r\\n               }\\r\\n       }\\r\\n\\r\\n       @Override\\r\\n       public void windowIconified(WindowEvent arg0) {\\r\\n               // TODO Auto-generated method stub\\r\\n               if (minorFrame.isVisible()) {\\r\\n                       minorFrame.setState(JFrame.ICONIFIED);\\r\\n               }\\r\\n       }\\r\\n\\r\\n       @Override\\r\\n       public void windowOpened(WindowEvent arg0) {\\r\\n               // TODO Auto-generated method stub\\r\\n\\r\\n       }\\r\\n\\r\\n       @Override\\r\\n       public void componentHidden(ComponentEvent arg0) {\\r\\n               // TODO Auto-generated method stub\\r\\n\\r\\n       }\\r\\n\\r\\n       @Override\\r\\n       public void componentMoved(ComponentEvent arg0) {\\r\\n               // TODO Auto-generated method stub\\r\\n               Point point = getLocation();\\r\\n               minorFrame.setLocation(point.x + SIZE\_X, point.y);\\r\\n       }\\r\\n\\r\\n       @Override\\r\\n       public void componentResized(ComponentEvent arg0) {\\r\\n               // TODO Auto-generated method stub\\r\\n\\r\\n       }\\r\\n\\r\\n       @Override\\r\\n       public void componentShown(ComponentEvent arg0) {\\r\\n               // TODO Auto-generated method stub\\r\\n\\r\\n       }\\r\\n\\r\\n}\\r\\n\\r\\nclass MinorFrame extends JFrame {\\r\\n       public MinorFrame() {\\r\\n               super();\\r\\n\\r\\n               setTitle("Minor Frame");\\r\\n\\r\\n               setSize(250, 400);\\r\\n               setVisible(true);\\r\\n               setResizable(false);\\r\\n               setDefaultCloseOperation(HIDE\_ON\_CLOSE);\\r\\n       }\\r\\n}

以上代码简单明了,只是作为例子演示,所以没有添加注释。

此代码仅供参考学习