JavaSE第八十一讲:AWT事件模型剖析 续

1. 上一讲内容我们讲到多监听者,复习一下这些内容

1) 多监听者可以使一个程序的不相关部分执行同样的动作

2) 事件发生时,所有被注册的监听者的处理器都会被调用

2. 事件Adapters(适配器)

1) 你定义的Listener可以继承Adapter类,而且只需重写你所需要的方法

2) 为了方便起见,Java语言提供了Adapters类,用来实现含有多个方法的类。这些Adapters类中的方法是空的。

3) 你可以继承Adapters类,而且只需重写你所需要的方法

为简化编程,JDK针对大多数事件监听器接口定义了相应的实现类,我们称之为事件适配器(Adapter)类; 在适配器类中,实现了相应监听器接口所有方法,但不做任何事情,只要继承适配器类,就等于实现了相应的监听器接口; 如果要对某类事件的某种情况进行处理,只要覆盖相应的方法就可以,其他的方法再也不用“简单实现”了; [注意]如果想用作事件监听器的类已经继承了别的类,就不能再继承适配器类了,只能去实现事件监听器接口了

它的写法如下所示:

图81-1:适配器的写法


针对上一讲程序 TwoListener.java 如下:

1). 针对上一讲的程序 TwoListener.java中,我们去实现了MouseMotionListener接口的时候,根据Java语法必须将此接口的方法全部实现出来,而我们真正重写的就是两个方法,其他的好几个方法我们都没有真正去实现,也就是空实现了。其实这样的状况出现对整体代码阅读性来说是比较不好的,因此在这边引入了适配器的概念,通过适配器我们可以更好的整理我们的代码,适配器没有添加额外的功能,只是方便我们更好的阅读代码。

2). 大部分的监听器都有自己的适配器[接口ActionListener就是没有实现适配器的类,因为它就一个方法 actionPerformed(),能实现这个类,肯定就是要使用这个方法,所以不用多此一举了],查看JDK Doc文档MouseMotionListener接口,可以发现其实现适配器类MouseAdapter,所以这个适配器实现了接口的所有方法,同时一个适配器也可以实现多个接口,并且实现了全部接口的方法。

3). 程序demo如下: 

package com.ahuier.awt;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class TwoListenerAdapter {
	private Frame frame;
	private TextField textField;

	public void go() {
		frame = new Frame("Two Listener Example");
		frame.add(new Label("click"), BorderLayout.NORTH); // 添加一个 Label:标签
		textField = new TextField(30); // 表示文本框的长度为30
		frame.add(textField, BorderLayout.SOUTH);
		
		frame.addMouseListener(new MyAdapter());
		
        frame.setSize(300, 200);  
        frame.setVisible(true);  
	}
	
    public static void main(String[] args) {  
        TwoListenerAdapter two = new TwoListenerAdapter();  
        two.go();  
    }  
}

class MyAdapter extends MouseAdapter {
	@Override
	public void mouseEntered(MouseEvent e) {
		String str = "The mouse has entered the Frame";
		System.out.println(str);
	}

	@Override
	public void mouseExited(MouseEvent e) {
		String str = "The mouse has exited the Frame";
		System.out.println(str);
	}
}

编译执行结果就不贴出来了自己去编译。

[说明]:查看MouseAdapter源代码

public abstract class MouseAdapter implements MouseListener, MouseWheelListener, MouseMotionListener 

它是一个抽象类,类里面的方法全都是空的,也就是让继承这个类的类自己去实现这些方法,这里就不粘贴出来了,自己查看源代码。

可以发现它实现了Mouse的各种Listener,同时它里面定义的


3. 由于Eclipse一般没有图形化的界面设计,下载NetBeans,可以了解一下它的图形界面设计的使用方法。


4. 作业:实现一个简单的计算器。要考虑到用户的输入:Input is evil. 

1). 用户输入可以支持键盘输入 [JDK Doc文档:keyAdapter 、getKeyChar()、getKeyCode() 等 ]

2). 针对异常的处理,比如说9/0是要抛出异常的,这点需要注意

3). 试着用Swing界面设计 




你可能感兴趣的:(java,java,java,监听器,Adapter,Adapter,Netbeans,Netbeans,适配器)