事件处理机制
事件源:产生事件的组件,例如:按钮、窗口等。
事件对象:用户的操作。
监听器:监听事件源上发生的事件,对各种事件作出相应处理。
窗体事件
对窗体事件进行处理时,首先需要定义一个实现了WindowListener接口的类作为窗体监听器,然后通过addWindowListener()方法把窗体对象和窗体监听器绑定。
例:
package com.company.www;
import javax.swing.*;
import java.awt.event.*;
public class Frame {
public static void GUI(){
JFrame frame=new JFrame("窗体事件");
frame.setSize(500,400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {
System.out.println("窗体打开事件");
}
@Override
public void windowClosing(WindowEvent e) {
System.out.println("窗体正在关闭事件");
}
@Override
public void windowClosed(WindowEvent e) {
System.out.println("窗体关闭事件");
}
@Override
public void windowIconified(WindowEvent e) {
System.out.println("窗体图标化事件");
}
@Override
public void windowDeiconified(WindowEvent e) {
System.out.println("窗体取消图标化事件");
}
@Override
public void windowActivated(WindowEvent e) {
System.out.println("窗体激活事件");
}
@Override
public void windowDeactivated(WindowEvent e) {
System.out.println("窗体停用事件");
}
});
}
public static void main(String[] args){
SwingUtilities.invokeLater(Frame::GUI);
}
}
输出结果为:
窗体激活事件
窗体打开事件
窗体图标化事件
窗体停用事件
窗体取消图标化事件
窗体激活事件
窗体正在关闭事件
鼠标事件
处理鼠标事件时,先实现MouseListener接口定义监听器(也可以通过继承适配器MouseAdapter类定义监听器),然后调用addMouseListener()方法将监听器绑定到事件源对象。
package com.company.www;
import javax.swing.*;
import java.awt.event.*;
public class Frame {
public static void GUI(){
JFrame frame=new JFrame("鼠标事件");
frame.setSize(500,400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton btn=new JButton("按钮");
btn.setSize(300,200);
frame.add(btn);
btn.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("鼠标完成单击事件");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("鼠标按下事件");
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("鼠标放开事件");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("鼠标进入按钮区域事件");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("鼠标移出按钮区域事件");
}
});
}
public static void main(String[] args){
SwingUtilities.invokeLater(Frame::GUI);
}
}
输出结果为:
鼠标进入按钮区域事件
鼠标移出按钮区域事件
鼠标进入按钮区域事件
鼠标按下事件
鼠标放开事件
鼠标完成单击事件
鼠标移出按钮区域事件
键盘事件
处理键盘事件的监听器对象需要实现KeyListener接口或者继承KeyAdapter类,然后调用addKeyListener()方法将监听器绑定到事件源对象。
package com.company.www;
import javax.swing.*;
import java.awt.event.*;
public class Frame {
public static void GUI(){
JFrame frame=new JFrame("键盘事件");
frame.setSize(500,400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextArea ta=new JTextArea(2,2);
frame.add(ta);
ta.setVisible(true);
ta.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
char s=e.getKeyChar();
int n=e.getKeyCode();
System.out.println("键盘按下的字符内容为:"+s);
System.out.println("键盘按下的字符代码为:"+n);
}
@Override
public void keyReleased(KeyEvent e) {
}
});
}
public static void main(String[] args){
SwingUtilities.invokeLater(Frame::GUI);
}
}
输出结果为:
键盘按下的字符内容为:h
键盘按下的字符代码为:72
键盘按下的字符内容为:a
键盘按下的字符代码为:65
键盘按下的字符内容为:p
键盘按下的字符代码为:80
键盘按下的字符内容为:p
键盘按下的字符代码为:80
键盘按下的字符内容为:y
键盘按下的字符代码为:89
动作事件
动作事件不代表某类事件,只是表示一个动作发生了。例如,在关闭一个文件时,可以通过键盘关闭,也可以通过鼠标关闭。不需要关心使用哪种方式关闭文件,只要是对关闭按钮进行操作,就会触发动作事件。
处理动作事件的监听器对象需要实现ActionListener接口。监听器对象在监听动作时,不会像鼠标事件一样处理鼠标的移动和单击的细节,而是去处理像键盘按下这类 有意义 的事件。