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. Java学习笔记--Collection和Collections的区别

    转自 http://pengcqu.iteye.com/blog/492196 比较Collection 和Collections的区别.   1.java.util.Collection 是一个集合 ...

  2. AFNnetworking快速教程,官方入门教程译

    AFNnetworking快速教程,官方入门教程译 分类: IOS2013-12-15 20:29 12489人阅读 评论(5) 收藏 举报 afnetworkingjsonios入门教程快速教程 A ...

  3. hdu Examining the Rooms

    这道题的知识点第一次听说 ,就是应用斯特林数.题目的意思是给你房间数N,和最多能破门的个数,让你求能全部把房间打开的概率! a[i][j]=a[i-1][j-1]+(i-1)*a[i-1][j]; # ...

  4. LeetCode_Rotate List

    Given a list, rotate the list to the right by k places, where k is non-negative. For example: Given ...

  5. universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法

    在listview/gridview中使用UIL来display每个item的图片,当图片数量较多需要滑动滚动时会出现卡顿,而且加载过的图片再次上翻后依然会重复加载(显示设置好的加载中图片) 最近在使 ...

  6. url中的jsessionid解释

    (1) 这是一个保险措施 因为Session默认是需要Cookie支持的 但有些客户浏览器是关闭Cookie的 这个时候就需要在URL中指定服务器上的session标识,也就是5F4771183629 ...

  7. Linux磁盘及文件系统管理 2---- 使用fdisk进行磁盘管理

    1 FDISK分区工具 1 fsidk是来自IBM的分区工具,支持绝大多数的操作系统,几乎所有的Linux都装有fdisk 2 fdisk是一个支持MBR的分区工具,如果要使用GPT的话我们无法使用f ...

  8. HDOJ 1316 How Many Fibs?

    JAVA大数.... How Many Fibs? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  9. 简学LINGO(三)——实例篇

    1. 装配线平衡模型 一个装配线含有一系列的工作站.在终于产品的加工过程中每一个工作站运行一种或者是几种特定的任务.装配线周期是指全部工作站完毕分配给他们各自任务所花费时间的最大值.平衡装配线的目标是 ...

  10. OC中语法糖,最新语法总结

    <span style="font-size:24px;"> 1.方法与顺序无关 2.枚举绑定数据类型 enum { ObjectiveC, Java, Ruby, P ...