1.事件模型

在整个事件触发和相应的过程中,主要涉及一下3类对象

(1) 事件源 : 引起时间的GUI对象,如各类组件(Button,Label,TextField),容器组件(Frame,panel,ScrallPane等)

(2) 事件类 : 事件类是引发的GUI时间封装成的类,如鼠标事件 MouseEvent

(3) 事件处理器 : 接收事件类

1.1 事件类

 低级事件
  ComponentEvent( 组件事件:组件尺寸的变化,移动)
  ContainerEvent( 容器事件:组件增加,移动)
  WindowEvent( 窗口事件:关闭窗口,窗口闭合,图标化)
  FocusEvent( 焦点事件:焦点的获得和丢失)
  KeyEvent( 键盘事件:键按下、释放)
  MouseEvent( 鼠标事件:鼠标单击,移动)
 高级事件(语义事件)
  ActionEvent(动作事件:按钮按下,TextField中按Enter键)
  AdjustmentEvent(调节事件:在滚动条上移动滑块以调节数值)
  ItemEvent(项目事件:选择项目,不选择"项目改变")
  TextEvent(文本事件,文本对象改变)

1.2 事件处理器

处理组件触发事件的方法成为“事件处理器”,事件处理器必须实现事件监听接口才能接收对应的事件类,每类事件都用对应的事件监听接口实现接口的事件处理器来接收对应的事件类。

1.3注册事件处理器

在组件中注册该组件将引发时间类对应的事件处理器,如按钮的单击事件可以用行为事件类(ActionEvent)来封装,也可用MouseEvent。在按钮组件中注册该ActionEvent事件的处理器,使用addActionListener方法:

Button a = new Button("a");

a.addActionListener(new actionHandler());

常用事件处理器注册方法:

(1)addActionListener(), 可用于Button以及TextField等具有行为操作的组件

(2)addAdjustmentListener() 可用于ScrollBar等具有滚动操作的组件

(3)addFocusListener()  可用于具有焦点操作的组件

(4)addItemListener()  可用于CheckBox ComboBox等具有项选择操作的组件

(5)addKeyListener()  可用于具有键盘输入操作的组件

(6)addMouseListener()  可用于具有鼠标操作的组件

(7)addWindowListener()  可用于窗体操作的组件

2.事件处理器

所有AWT事件及其相应的监听器接口,一共10类事件,11个接口

事件类别
描述信息
接口名
方法
 ActionEvent 激活组件   ActionListener  actionPerformed(ActionEvent)
 ItemEvent 选择了某些项目   ItemListener  itemStateChanged(ItemEvent)
 MouseEvent 鼠标移动   MouseMotionListener  mouseDragged(MouseEvent)
 mouseMoved(MouseEvent)
鼠标点击等   MouseListener  mousePressed(MouseEvent)
 mouseReleased(MouseEvent)
 mouseEntered(MouseEvent)
 mouseExited(MouseEvent)
 mouseClicked(MouseEvent)
 KeyEvent 键盘输入   KeyListener  keyPressed(KeyEvent)
 keyReleased(KeyEvent)
 keyTyped(KeyEvent)
 FocusEvent 组件收到或失去焦点   FocusListener  focusGained(FocusEvent)
 focusLost(FocusEvent)
AdjustmentEvent 移动了滚动条等组件   AdjustmentListener  adjustmentValueChanged(AdjustmentEvent)
 ComponentEvent 对象移动缩放显示隐藏等   ComponentListener  componentMoved(ComponentEvent)
 componentHidden(ComponentEvent)
 componentResized(ComponentEvent)
 componentShown(ComponentEvent)
 WindowEvent 窗口收到窗口级事件   WindowListener  windowClosing(WindowEvent)
 windowOpened(WindowEvent)
 windowIconified(WindowEvent)
 windowDeiconified(WindowEvent)
 windowClosed(WindowEvent)
 windowActivated(WindowEvent)
 windowDeactivated(WindowEvent)
 ContainerEvent 容器中增加删除了组件   ContainerListener  componentAdded(ContainerEvent)
 componentRemoved(ContainerEvent)
 TextEvent 文本字段或文本区发生改变   TextListener  textValueChanged(TextEvent)
一些例子:

eg 1  点击确定按钮弹出新窗口
public class ClickEvent {
public static void main(String[] args) {
Frame frame = new Frame("Frame 窗体");
frame.setLayout(new GridLayout(1,2)); Button b1 = new Button("确定");
Button b2 = new Button("取消");
frame.add(b1);
frame.add(b2);
frame.pack();//窗口设置为最佳大小
b1.addActionListener(new MyClickListener());
b2.addActionListener(new MyClickListener());
frame.setVisible(true);
}
} class MyClickListener implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("确定")){
Frame newWindow = new Frame("新窗口");
newWindow.setSize(100,100);
newWindow.setVisible(true);
}else{
System.exit(0);
} }
}

eg 2 拖动鼠标在控制台显示鼠标轨迹坐标,点击鼠标左键在控制台显示点击坐标

public class EventListener {

	EventListener(){
Frame frame = new Frame("Frame 窗体");
frame.setSize(200,200);
frame.addMouseListener(new MyMouseListener());
frame.addMouseMotionListener(new MouseMotionListener(){
public void mouseDragged(MouseEvent e){
System.out.println("拖动鼠标,当前位置:"+e.getX()+","+e.getY());
}
public void mouseMoved(MouseEvent e){ }
});
frame.setVisible(true);
} public static void main(String[] args) {
/*Frame frame = new Frame("Frame 窗体");
frame.setSize(200,200);
frame.addMouseListener(new MyMouseListener());
frame.setVisible(true);*/
new EventListener(); } } //用接口有一个缺点:所有方法必须实现
class MyMouseListener implements MouseListener{
public void mouseClicked(MouseEvent e){
System.out.println("鼠标当前位置:"+e.getX()+","+e.getY());
} public void mousePressed(MouseEvent e){
}
public void mouseReleased(MouseEvent e){
}
public void mouseExited(MouseEvent e){
}
public void mouseEntered(MouseEvent arg0) {
}
}

 

eg 3 在文本框显示按下的键盘键

public class KeyAdapterCls {

	public static void main(String[] args) {
Frame frame = new Frame("Frame窗体");
frame.setLayout(new GridLayout(2,1));
Button btn = new Button("请按下键盘");
final TextField txt;
txt = new TextField();
btn.addKeyListener(new KeyListener(){
public void keyPressed(KeyEvent e){
txt.setText(txt.getText() + e.getKeyChar());
}
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){}
}); frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}); frame.add(btn);
frame.add(txt);
frame.setSize(400,200);
frame.setVisible(true);
} }

  

Java学习笔记--AWT事件处理的更多相关文章

  1. Java学习笔记--Swing用户界面组件

    很多与AWT类似. 事件处理参考:Java学习笔记--AWT事件处理 1.设计模式: 模型:存储内容视图:显示内容控制器:处理用户输入· 2. 文本输入常用组件 2.1 文本域: JLabel lab ...

  2. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  3. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  4. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  5. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  6. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  7. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  8. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  9. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

随机推荐

  1. Json数据转换

    using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...

  2. ubuntu12.04安装jdk-7u79-linux-i586.tar.gz

    第一步:下载jdk-7u79-linux-i586.tar.gz 1.wget -c http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux ...

  3. 在NGINX上配置HTTPS---血的教训--要重启NGINX

    重启,不是重载!!! 是STOP & START 而不是RELOAD!!! 纠结了好几天...(难道有的NGINX上不用重启????) 你妹的,上次也是,,PHP-FPM,将一个PHP的程序连 ...

  4. 深入理解7816(2)---关于ATR

    智能卡(此处主要指接触式CPU卡)本身始终处于被动的状态,所以终端设备在和智能卡进行数据交互的时候,需要首先给智能卡发指令,智能卡才会对应地给出应答.而智能卡告诉终端的第一句话就是ATR,亦即“复位应 ...

  5. Powershell创建对象

    .Net类型中的方法功能很强大.可以通过类型的构造函数创建新的对象,也可以将已存在的对象转换成指定的类型. 通过New-Object创建新对象 如果使用构造函数创建一个指定类型的实例对象,该类型必须至 ...

  6. BZOJ2023: [Usaco2005 Nov]Ant Counting 数蚂蚁

    2023: [Usaco2005 Nov]Ant Counting 数蚂蚁 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 56  Solved: 16[S ...

  7. hdu 1874 畅通工程续(最短路)

    最短路问题! 最简单的最短路问题! 恩! #include<stdio.h> #define MAX 1000000 int map[500][500]; int n,m,start,en ...

  8. Day56

    今天干啦啥呢 早上七点起来 天气冷了真起不来啊 再坚持坚持就好了 今天上午九点开始考数据库 我去 大学四年第一次感觉到这样的爽  作弊的爽啊 也没有完全的作弊啦 是开卷考试,反正做的很顺利了. 我和胡 ...

  9. Adroid APPIUM实例步骤

      1.下载eclipse 2.安装java 配置环境变量 3.eclipse 安装adt android development tools 4.android sdk manager 安装tool ...

  10. [原创]Web前端开发——让ie 7 8支持表单的placeholder属性

    今天在写页面的时候,测试低版本浏览器时,发现input写的placeholder显示的是空白,所以特意写了一个普遍试用的方法来让低版本浏览器支持这个属性. 博主建了一个技术共享qq群:,因为目前人数还 ...