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}
以上代码简单明了,只是作为例子演示,所以没有添加注释。
此代码仅供参考学习