AWT事件处理模型

在事件处理的过程中,主要涉及以下三类对象:
Event:事件,用户对界面操作在Java语言上的描述,以类的形式出现
Event Source:事件源,事件发生的场所,通常就是各种组件
Event Handler:事件处理者,接受事件对象并对其进行处理的对象
举个例子:TestButton.java

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestButton {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Frame f = new Frame("Test");
		Button b = new Button("Press Me!");
		b.addActionListener(new ButtonHandler());     //该方法的参数是事件处理者,要处理的是ActionEvent事件
		f.setLayout(new FlowLayout());
		f.setSize(200,200);
		f.add(b);
		f.setVisible(true);
 
	}
}
	class ButtonHandler implements ActionListener{       //实现接口ActionListener才能充当事件ActionEvent的处理者
		public void actionPerformed(ActionEvent e) {          //系统产生的ActionEvent事件对象被当前做参数传递给该方法
			System.out.println("Action occurred");
		}
	}

java awt dialog对话框组件 java.awt.event.inputevent_内部类


执行后,单击按钮就会在命令行中输出“Action occurred”

在钙离子中,事件源就是按钮,事件是ActionEvent对象,事件处理者是ButtonHandler对象,事件发生后,java的运行系统会自动调用ButtonHandler对象的actionPerformed()方法进行处理,而且事件ActionEvent对象将被当作参数传递给actionPerformed()方法;

事件类

1.java.lang.Object
java。util。EventObject类是所有事件对象的基础父类,所有事件都是由它派生出来的。

2.java.awt.AWTEvent
与AWT有关的所有事件类都由java.awt.AWTEvent类派生,这些AWT事件被分为低级事件和高级事件两大类;低级时间是指基于组件和容器的事件,如鼠标的点击、进入等都是低级事件,高级事件可以不和特定的动作相关联,而依赖于触发此事件的类;
低级事件:ComponentEvent(组件事件:组件尺寸的变化,移动)
ContainerEvent(容器事件:组件的增加,移动)
WindowEven(窗口事件:关闭窗口,图标化)
高级事件:ActionEvent(动作事件:按钮按下,TextField中按Enter键)
TextEvent(文本事件:文本对象改变)

事件适配器

Java语言为为一些Listener接口提供了适配器(Adapter)类。
java.awt.event包中定义的事件适配器:
ComponentAdapter(组件适配器)
ContainerAdapter(容器适配器)
FocusAdapter(焦点适配器)
KeyAdapter(键盘适配器)

用内部类实现事件处理
内部类是被定义于另一个类中的类。
编写事件驱动程序,内部类很方便

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestInnerClass {

		private Frame f;
		private TextField tf;
		public void launchFrame() {
			f = new Frame("Inner");
			tf = new  TextField(30);
			Label label = new Label("Click and drag the mouse");
			f.add(label, BorderLayout.NORTH);
			f.add(tf,BorderLayout.SOUTH);
			f.addMouseMotionListener(new MyMouseMotionListener());    //参数为内部类
			f.addWindowListener(new MyWindowListener());       
			f.setSize(200,200);
			f.setVisible(true);
		}
		class MyMouseMotionListener extends MouseMotionAdapter {   //内部类的开始

			@Override
			public void mouseDragged(MouseEvent e) {
				// TODO Auto-generated method stub
		        String s = "Mouse dragging: x = "+e.getX()+"y = "+e.getY();
		        tf.setText(s);
			}                                              //内部类结束
		}
		class MyWindowListener extends WindowAdapter{              //内部类的开始
			public void windowClosing(WindowEvent e) {
				System.exit(1);
			}
			
		}                                             //内部类结束
		public static void main(String[] args) {
			// TODO Auto-generated method stub
			TestInnerClass tic = new TestInnerClass();
			tic.launchFrame();

	}

}

java awt dialog对话框组件 java.awt.event.inputevent_java_02

匿名类
所谓匿名,就是该类连名字都没有,只是显示地调用一个无参的父类的构造方法,由于匿名类本身无名,因此它也就不存在构造方法,它需要显示地调用一个无参的父类的构造方法,并且重写父类的方法;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class AnonymousClass {

		private Frame f;
		private TextField tf;
		public AnonymousClass() {
			f = new Frame("Inner");
			tf = new  TextField(30);
		}
		public void launchFrame() {
			Label label = new Label("Click and drag the mouse");
			f.add(label, BorderLayout.NORTH);
			f.add(tf,BorderLayout.SOUTH);
			f.addMouseMotionListener(new MouseMotionAdapter() {         //匿名类开始
				public void mouseDragged(MouseEvent e) {
					// TODO Auto-generated method stub
			        String s = "Mouse dragging: x = "+e.getX()+"y = "+e.getY();
			        tf.setText(s);
				}
			});                                             //匿名类结束
			f.addWindowListener(new WindowAdapter() {                    //匿名类开始
				public void windowClosing(WindowEvent e) {
					System.exit(1);
				}
			});                                                      //匿名类结束
			f.setSize(200,200);
			f.setVisible(true);
		}
		
		public static void main(String[] args) {
			// TODO Auto-generated method stub
			AnonymousClass obj = new AnonymousClass();
			obj.launchFrame();

	}

}

java awt dialog对话框组件 java.awt.event.inputevent_java_03


两个例子实现的功能都是完全一样的,只不过采取的方式不同;