Java监测窗口事件

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;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class MainFrame extends JFrame implements ComponentListener,
		WindowListener {
	public static final int SIZE_X = 400;
	public static final int SIZE_Y = 400;
	public static final int LOC_X = (Toolkit.getDefaultToolkit()
			.getScreenSize().width - SIZE_X) / 2;
	public static final int LOC_Y = (Toolkit.getDefaultToolkit()
			.getScreenSize().height - SIZE_Y) / 2;

	MinorFrame minorFrame;
	JButton ShowBtn;

	public MainFrame() {
		super();

		this.minorFrame = new MinorFrame();

		setTitle("Main Frame");
		setLayout(new FlowLayout());

		add(getShowBtn());

		addComponentListener(this);
		addWindowListener(this);

		setBounds(LOC_X, LOC_Y, SIZE_X, SIZE_Y);
		setVisible(true);
		setResizable(false);
		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
	}

	private JButton getShowBtn() {
		// TODO Auto-generated method stub
		if (ShowBtn == null) {
			ShowBtn = new JButton("Show");
		}
		ShowBtn.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				if (!minorFrame.isVisible()) {
					minorFrame.setVisible(true);
				}
				minorFrame.setState(JFrame.NORMAL);
			}
		});
		return ShowBtn;
	}

	public static void main(String args[]) {
		new MainFrame();
	}

	@Override
	public void windowActivated(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowClosed(WindowEvent arg0) {
		// TODO Auto-generated method stub

		System.out.println("Windows Closed!");
	}

	@Override
	public void windowClosing(WindowEvent arg0) {
		// TODO Auto-generated method stub

		if (JOptionPane.OK_OPTION == JOptionPane.showConfirmDialog(this,
				"Are you sure to close the window?", "Window Closing...",
				JOptionPane.OK_CANCEL_OPTION)) {
			minorFrame.dispose();
			this.dispose();
			// System.exit(0);
		}
	}

	@Override
	public void windowDeactivated(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowDeiconified(WindowEvent arg0) {
		// TODO Auto-generated method stub
		if (minorFrame.isVisible()) {
			minorFrame.setState(JFrame.NORMAL);
		}
	}

	@Override
	public void windowIconified(WindowEvent arg0) {
		// TODO Auto-generated method stub
		if (minorFrame.isVisible()) {
			minorFrame.setState(JFrame.ICONIFIED);
		}
	}

	@Override
	public void windowOpened(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void componentHidden(ComponentEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void componentMoved(ComponentEvent arg0) {
		// TODO Auto-generated method stub
		Point point = getLocation();
		minorFrame.setLocation(point.x + SIZE_X, point.y);
	}

	@Override
	public void componentResized(ComponentEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void componentShown(ComponentEvent arg0) {
		// TODO Auto-generated method stub

	}

}

class MinorFrame extends JFrame {
	public MinorFrame() {
		super();

		setTitle("Minor Frame");

		setSize(250, 400);
		setVisible(true);
		setResizable(false);
		setDefaultCloseOperation(HIDE_ON_CLOSE);
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值