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. JS获取select的值

    记录一下JS获取select的value值和选项值 <select id="video_status"> <option value="1" ...

  2. java中setDate(Date date)方法和String与Date之间的转换

    经常在开发的过程中遇到这样的问题,从数据库中读出来的数据需要转换为对像或者java bean,此时经常使用到setDate(Date date);这样的方法.感觉这是个很简单而又难受的事情,在这里浪费 ...

  3. Effective Java Item4:Enforce noninstantiability with a private constructor

    Item4:Enforce noninstantiability with a private constructor 通过构造私有化,禁止对象被实例化. public class UtilClass ...

  4. Codeforces 276D Little Girl and Maximum XOR

    题意:给范围l,r选两个数亦或最大是多少. 思路:找到第一个l和r二进制下不相同的位置i,然后答案就是2^(i+1)-1,因为一个取0一个取1之后,后面的位置全部选1和全部选0,就是这样:011111 ...

  5. PowerShell中调用外部程序和进程操作命令例子

    学习PowerShell,我们不指望通过C#编程去搞定所有事情,我们应该记住cmd.exe或者说批处理给我们留下的宝贵财富——通过调用外部程序去解决问题.调用了外部程序,势必就要对进程进行管理,这就是 ...

  6. Visual Studio 启动加速

    Who is locking my SQL database?|Deploy a database project with TFS Build Visual Studio 2012 running ...

  7. Jetty直接调试,不用部署,不用弄一些杂七杂八的设置

    以前调试web程序的,搭建Tomcat实在是费劲,就想找一个比较简单的方式,我就想调试一下我写的某一个servlet形式,看到<how Tomcat works>这本书,才明白确实可以,不 ...

  8. centerOS安装chkrootkit

    Chkrootkit是一个在本地系统检查rootkit痕迹的工具,它是检查系统二进制文件是否被rootkit病毒修改的一个shell脚本. (1)centerOS安装chkrootkit 安装gcc编 ...

  9. java 读取mysql库表数据

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  10. javascript实现的有缩略图功能的幻灯片切换效果

    不久前写了一个简单的图片效果,没想到那么快就要用到项目中,所以功能方面要丰富一下: 主要改进: 1# 用圆点代替之前简单的页数显示,并且点击圆点可以显示对应图片: 2# 点击圆点,显示对应图片的缩略图 ...