目录
前言
在Java的图形界面开发中,要让图形界面接收到用户的操作,就要给各个组件添加事件处理机制。那么什么是事件,什么是事件处理机制呢,好了,今天我们来学习Java事件。
事件
事件是为了实现用户对图形界面组件的操作,定义了一些事件,例如:
- 鼠标事件:单击,双击,滚轮等;
- 键盘事件 按下键盘,松开按键等;
- 焦点事件 :焦点获得 ,焦点失去;
- 窗口事件: 窗口打开,窗口关闭等。
事件处理
事件处理包括以下3个部分:
- 事件源:发生事件的GUI部件,发生事件的对象;
- 事件:用户对事件源进行操作触发事件;
- 事件监听者:负责对事件的处理。
统计按钮单击次数,例如:
import java.awt.*;
import java.awt.event.*;
class CountFrame extends Frame implements ActionListener{ //定义一个CountFrame类并继承Frame类和连接ActionListener接口
Label r; //显示结果的标签
int value=0; //计数值
public CountFrame() { //构造方法
super("统计按钮单击"); //调用父类的构造方法定义窗体的标题
r=new Label("结果"); //创建Label标签
Button btn=new Button("计数"); //创建Button按钮
setLayout(new FlowLayout()); //指定按流式布局排列部件
add(btn); //添加Button按钮
add(r); //添加Label标签
btn.addActionListener(this); //注册动作事件监听者
}
public void actionPerformed(ActionEvent e) { //定义事件
value++; //统计单击次数
r.setText(" "+value); //将结果显示在标签中
}
}
public class first {
public static void main(String[] args) {
Frame x=new CountFrame();
x.setSize(400,200); //设置窗体大小
x.setVisible(true); //让窗体可见
}
}
注意:创建部件后,一定要使用add(部件名),才能把部件添加到窗体中。
运行结果为:
事件处理流程
给事件源对象注册监听者
Java的事件处理机制称为委托事件处理,给事件源对象注册监听者是发生事件时委托监听者处理事件。事件监听者是在事件发生时要对事件进行处理的对象。
若事件类名为AAAEvent,则事件监听接口的命名为AAAListener,给部件注册监听者的方法为addAAAListener(AAAListener a)。
例如:
import java.awt.event.*;
public class MyFrame extends Frame implements ActionListener{
public MyFrame(){
...
btn.addActionListener(this); //创建监听者
...
}
public void actionPerformed(ActionEvent e){
... //方法体内容
}
}
用内嵌类实现
public class MyFrame extends Frame{
public MyFrame(){
btn.addActionListener(new Process()); //用内嵌类对象作为监听者
...
}
class Process implements ActionListener{
public void actionPerformed(ActionEvent e){
... //方法体
}
}
}
用匿名内嵌类实现
public class MyFrame extends Frame{
public MyFrame(){
btn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){...}
}
);
...
}
...
}
给监听者编写事件处理代码
事件监听者作用是实现事件的处理,监听者若要实现ActionListener接口则必须实现接口中定义的所有方法。在ActionListener接口中只定义一个方法,是用来完成事件处理的actionPerformed()方法。该方法有一个ActionEvent类型的参数,在方法体中可通过该参数得到事件源对象。在方法体中编写具体的事件处理代码。
发生事件时调用监听者的方法进行相关处理
事件源通过注册监听者的动作实现了委托登记,发生事件时就能根据去调用监听者的相应方法。
事件监听者接口及其方法
图形界面的每个可能产生事件的部件统称为事件源,不同的事件源上发生的事件种类不同,与之相关的事件处理接口也不同。
Java的所有事件类都定义在java.awt.event包中。
AWT事件接口及处理方法如下表:
描述信息 | 接口名称 | 方法(事件) |
---|---|---|
单击按钮、单击菜单项、文本框按Enter键等动作 | ActionListener | actionPerformed(ActionEvent) |
选择了可选项的项目 | ItemListener | itemStateChanged(ItemEvent) |
文本部件内容改变 | TextListener | textValueChanged(TextEvent) |
移动了滚动条等部件 | AdjustmentListener | adjustmentValueChanged(AdjustmentEvent) |
鼠标移动 | MouseMotionListener | mouseDragged(MouseEvent) mouseMoved(MouseEvent) |
鼠标单击 | MouseListener | mousePressed(MouseEvent) mouseReleased(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent) mouseClicked(MouseEvent) |
键盘输入 | KeyListener | keyPressed(KeyEvent) keyReleased(KeyEvent) keyTyped(KeyEvent) |
部件收到或失去焦点 | FocusListener | focusGained(FocusEvent) focusLost(FocusEvent) |
部件移动、缩放、显示/隐藏 | ComponentListener | componentMoved(ComponentEvent) componentHidden(ComponentEvent) componentResized(ComponentEvent) componentShown(ComponentEvent) |
窗口事件 | WindowListener | windowClosing(WindowEvent) windowOpened(WindowEvent) windowIconified(WindowEvent) windowDeiconified(WindowEvent) windowClosed(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent) |
容器增加/删除部件 | ContainerListener | containerAdded(ContainerEvent) containerRemoved(ContainerEvent) |
在事件处理代码中区分事件源和使用适配器
一个事件源可以注册多个监听者,一个监听者也可以监视多个事件源。
区分事件源
ActionEvent对象提供了两种方法:
- getSource():用来获取事件源对象;
- getActionCommand():用来获取按钮事件对象的命令名,按钮对象的命令名默认就是按钮的标签名,但两者也可以设置不同的名称。
利用getSource()进行区分
btn参照上面的统计按钮单击次数实例
public void actionPerformed(ActionEvent e){
if(e.getSource()==btn){ //判断是否为事件源按钮
value++; //统计单击次数
r.setText(" "+value); //将结果显示在标签中
}
else
dispose(); //否则就关闭
}
利用getActionCommand()进行区分
btn参照上面的统计按钮单击次数实例
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("计数")){ //得到的是字符串,并进行比较是否是“计数”
value++; //统计单击次数
r.setText(" "+value); //将结果显示在标签中
}
else
dispose(); //否则就关闭
}
按钮对象提供了以下方法分别用来设置获取按钮的标签与命令名
- String getLabel():返回按钮的标签内容;
- void setLabel(String label):设置按钮的标签;
- void setActionCommand(String command):设置按钮的命令名;
- String getActionCommand():返回按钮的命令名。
使用事件适配器类
Java中为那些含多个方法的监听者接口提供了事件适配器类,对应AAAListener接口,这个类名为:AAAAdapter,在该类中以空方法体实现了相应接口的所有方法。
通过机车适配器类来编写监听者类,好处是在类中只需给出关心的方法。
适配器类实例
import java.awt.*;
import java.awt.event.*;
class MyFrame extends Frame{
public MyFrame() {
super("测试窗体关闭"); //调用父类的构造方法定义窗体的标题
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
Window w=e.getWindow(); //得到要处理的窗体对象
w.dispose(); //关闭窗体
}
});
setSize(300,200);
setVisible(true);
}
}
public class first {
public static void main(String[] args) {
new MyFrame();
}
}
运行结果为:
最后
好了,有关Java事件的知识学到这里了,谢谢观看!!!
我们下篇文章再见!!!
成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。