当窗口、窗口内的内容、外设等变动的时候,都会产生事件。

Java事件处理三要素:

    1) 事件源(Event Source):即事件发生的场所,就是指各个组件,如按钮等,点击按钮其实就是组件上发生的一个事件;

    2) 事件(Event):事件封装了组件上发生的事情,比如按钮单击、按钮松开等等;

    3) 事件监听器(Event Listener):负责监听事件源上发生的特定类型的事件,当事件到来时还必须负责处理相应的事件;

1、键盘事件

当向文本框中输入内容时,将发出键盘事件。KeyEvent类负责捕获键盘事件,可以通过为组件添加实现了KeyListener接口的监听器类来处理相应的键盘事件。

KeyListener接口共有三个抽象方法,分别在发生击键事件、按键被按下和释放时被触发。如下面代码所示
 

JTextArea textArea = new JTextArea();
textArea.addKeyListener(new KeyListener() {

	public void keyPressed(KeyEvent e) { // 按键被按下时被触发
		System.out.println("按下的是“" + e.getKeyChar() + "”");
	}

	public void keyTyped(KeyEvent e) { // 发生击键事件时被触发
		// 获得输入的字符
		System.out.println("此次输入的是“" + e.getKeyChar() + "”");
	}
	public void keyReleased(KeyEvent e) { // 按键被释放时被触发
		// 获得描述keyCode的标签
		String keyText = KeyEvent.getKeyText(e.getKeyCode());
		System.out.println("您释放的是“" + keyText + "”键");
		System.out.println();
	}

}

常用的方法

JAVA处理事件的步骤 java事件处理的三要素_java

2、鼠标事件

       所有组件都能发出鼠标事件,MouseEvent类负责捕获鼠标事件,可以通过为组件添加实现了MouseListener接口的监听器类来处理相应的鼠标事件。

MouseListener接口共有5个抽象方法,分别在光标移入或移出组件时、鼠标按键被按下或释放时和发生单击事件时被触发。

final JLabel label = new JLabel();
label.addMouseListener(new MouseListener() {

	public void mouseEntered(MouseEvent e) {// 光标移入组件时被触发
	System.out.println("光标移入组件");
	}

	public void mousePressed(MouseEvent e) {// 鼠标按键被按下时被触发
		System.out.print("鼠标按键被按下,");
		int i = e.getButton(); // 通过该值可以判断按下的是哪个键
		if (i == MouseEvent.BUTTON1)
			System.out.println("按下的是鼠标左键");
		if (i == MouseEvent.BUTTON2)
			System.out.println("按下的是鼠标滚轮");
		if (i == MouseEvent.BUTTON3)
			System.out.println("按下的是鼠标右键");
	}
}

 public void mouseClicked(MouseEvent e) // 发生单击事件时被触发

public void mouseExited(MouseEvent e) // 光标移出组件时被触发

public void mouseReleased(MouseEvent e) // 鼠标按键被释放时被触发

JAVA处理事件的步骤 java事件处理的三要素_JAVA处理事件的步骤_02

JAVA处理事件的步骤 java事件处理的三要素_事件监听器_03

 

 3、窗体事件

窗体焦点发生变化的事件

        // 为窗体添加焦点事件监听器
        addWindowFocusListener(new MyWindowFocusListener());

private class MyWindowFocusListener implements WindowFocusListener {
		public void windowGainedFocus(WindowEvent e) {// 窗口获得焦点时被触发
			System.out.println("窗口获得了焦点!");
		}
		public void windowLostFocus(WindowEvent e) {// 窗口失去焦点时被触发
			System.out.println("窗口失去了焦点!");
		}
	}

捕获窗体状态发生变化的事件

        // 为窗体添加状态事件监听器
        addWindowStateListener(new MyWindowStateListener());

private class MyWindowStateListener implements WindowStateListener {
	public void windowStateChanged(WindowEvent e) {
		int oldState = e.getOldState();// 获得窗体以前的状态
		int newState = e.getNewState();// 获得窗体现在的状态
		String from = "";// 标识窗体以前状态的中文字符串
		String to = "";// 标识窗体现在状态的中文字符串
		switch (oldState) {// 判断窗台以前的状态
			case Frame.NORMAL:// 窗体处于正常化
				from = "正常化";
				break;
			case Frame.MAXIMIZED_BOTH:// 窗体处于最大化
				from = "最大化";
				break;
			default:// 窗体处于最小化
				from = "最小化";
		}
	}
}

捕获其他与窗体有关的事件
 

addWindowListener(new MyWindowListener());// 为窗体添加其他事件监听器

    private class MyWindowListener implements WindowListener {
        public void windowActivated(WindowEvent e) {// 窗体被激活时触发
            System.out.println("窗口被激活!");
        }

}
public interface WindowListener extends EventListener {
    public void windowActivated(WindowEvent e); 	//窗体被激活时触发
    public void windowOpened(WindowEvent e); 	//窗体被打开时触发
    public void windowIconified(WindowEvent e); 	//窗体被图标化时触发
    public void windowDeiconified(WindowEvent e); 	//窗体被非图标化时触发
    public void windowClosing(WindowEvent e); 	//窗体将要被关闭时触发
    public void windowDeactivated(WindowEvent e);           //窗体不再处于激活状态时触发
    public void windowClosed(WindowEvent e); 	//窗体已经被关闭时触发
}

4、选项事件

当修改下拉菜单中的选中项时,将发出选项事件。ItemEvent类负责捕获选项事件,可以通过为组件添加实现了ItemListener接口的监听器类来处理相应的选项事件。

JComboBox<String> comboBox = new JComboBox<>();// 创建一个下拉菜单
for (int i = 1; i < 6; i++) {// 通过循环添加选项
	comboBox.addItem("选项" + i);
}

comboBox.addItemListener(new ItemListener() {// 添加选项事件监听器
    public void itemStateChanged(ItemEvent e) {
        int stateChange = e.getStateChange();// 获得事件类型
        String item = e.getItem().toString();// 获得触发此次事件的选项
        if (stateChange == ItemEvent.SELECTED) {// 查看是否由选中选项触发
            System.out.println("此次事件由      选中  选项“" + item + "”触发!");
            // 查看是否由取消选中选项触发
        } else if (stateChange == ItemEvent.DESELECTED) {
            System.out.println("此次事件由  取消选中  选项“" + item + "”触发!");
        } else {// 由其他原因触发
            System.out.println("此次事件由其他原因触发!");
        }
    }
});

getContentPane().add(comboBox);

5、表格模型中的事件

    当向表格模型中添加行时,或者是修改或删除表格模型中的现有行时,将发出表格模型事件。TableModelEvent类负责捕获表格模型事件,可以通过为组件添加实现了TableModelListener接口的监听器类来处理相应的表格模型事件。

String[] columnNames = { "A", "B" };
String[][] rowValues = { { "A1", "B1" }, { "A2", "B2" },
		{ "A3", "B3" }, { "A4", "B4" } };
// 创建表格模型对象
tableModel = new DefaultTableModel(rowValues, columnNames);
// 为表格模型添加事件监听器
tableModel.addTableModelListener(new TableModelListener() {
	public void tableChanged(TableModelEvent e) {
		int type = e.getType();// 获得事件的类型
		int row = e.getFirstRow() + 1;// 获得触发此次事件的表格行索引
		int column = e.getColumn() + 1;// 获得触发此次事件的表格列索引
		if (type == TableModelEvent.INSERT) {// 判断是否有插入行触发
			System.out.print("此次事件由 插入 行触发,");
			System.out.println("此次插入的是第 " + row + " 行!");
			// 判断是否有修改行触发
		} 
}
}