Java语言事件处理方式
使用匿名内部类
• 匿名内部类(Anonymous Inner Class),
– 没有名字的内部类,这是Java为了方便编写程序而设计的一个机制。 – 因为有时候有的内部类只需要创建一个它的对象就可以了,以后再不会
用到这个类 – 这时候使用匿名内部类就比较合适,而且也免去了给它取名字的烦恼
• 特别适用于需要继承其它父类(例如Applet程序,主类必须继承 JApplet类或Applet类)的场合
– 根据java语法规则,不能再继承适配器类 – 使用匿名内部类使得程序可读性更加清晰
使用匿名内部类样例
import java.awt.event.*; import javax.swing.*; public class Demo{
JFrame f; public Demo() {
f=new JFrame(); f.setSize(300,150); f.show(); f.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); f.addMouseListener(new MouseAdapter(){
样例输出
思考题
• Java有哪些事件处理方式?各自如何实现的?
JFrame f; public Demo() {
f=new JFrame(); f.setSize(300,150); f.show(); f.addMouseListener(this); //为窗口增加鼠标事件监听器 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseClicked(MouseEvent e){ f.setTitle(“点击坐标为 (”+e.getX()+“, ”+e.getY()); } public static void main(String[] args){
继承事件监听器适配器类样例
import java.awt.event.*; //载入MouseAdapter所在的包 import javax.swing.*; public class Demo extends MouseAdapter{
JFrame f; public Demo() {
f=new JFrame(); f.setSize(300,150); f.show(); f.addMouseListener(this); f.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); } public void mouseClicked(MouseEvent e){ f.setTitle("点击坐标为 ("+e.getX()+", "+e.getY()+")"); } public static void main(String[] args){ new Demo();}}
public void mouseClicked(MouseEvent e){ f.setTitle("点击坐标为 ("+e.getX()+", "+e.getY()+")"); }
}); //为窗口添加鼠标事件监听器语句结束 }
public static void main(String[] args){ new Demo(); }}
new Demo();}}
继承事件监听器适配器类
• Swing提供了一些适配器类×××Adapter;适配器类提
供了×××Listener接口中所有方法的默认实现(实质就 是空方法) • 程序只需编写那些需要进行处理的事件的方法。 • 例如,如果只想对鼠标敲击事件进行处理,如果使用 MouseAdapter类,则只需要重写mouseClicked方法 就可以了
事件处理方式
• 如何实现事件处理程序?
– 实现事件监听器接口 – 继承事件监听器适配器类 – 使用匿名内部类
实现事件监听器接口
• 需要实现接口中所有的方法 – 对于程序不关注的事件方法,也要列出来并使用空方法实现 – 空方法就是没有方法体中没有任何代码
实现事件监听器接口样例
import java.awt.event.*; //载入MouseListener类所在的包 import javax.swing.*; //载入JFrame所在的包 public class Demo implements MouseListener{