Java学习笔记--AWT事件处理
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个接口
|
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事件处理的更多相关文章
- Java学习笔记--Swing用户界面组件
很多与AWT类似. 事件处理参考:Java学习笔记--AWT事件处理 1.设计模式: 模型:存储内容视图:显示内容控制器:处理用户输入· 2. 文本输入常用组件 2.1 文本域: JLabel lab ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- Java学习笔记(04)
Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...
- 0032 Java学习笔记-类加载机制-初步
JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
随机推荐
- javascript 中ASCII字符值转换
char-->ascii var a = "123"; a.charAt(1).charCodeAt();ascii-->char String.fro ...
- Python 坑爹之 代码缩进
建议:统一使用空格!!!!!!!!!不要Tab Python代码缩进 这两天python-cn邮件列表有一条thread发展的特别长,题目是<python的代码缩进真是坑爹>(地址), ...
- Linux Top使用说明
运行top后,按P键就按CPU排序,按M键就按内存排序 P – 以 CPU 占用率大小的顺序排列进程列表 M – 以内存占用率大小的顺序排列进程列表 在系统维护的过程中,随时可能有需要查看 CPU 使 ...
- hdu3849-By Recognizing These Guys, We Find Social Networks Useful:双连通分量
By Recognizing These Guys, We Find Social Networks Useful Time Limit: 2000/1000 MS (Java/Others) ...
- 自己意淫的一个简陋的Python网站扫描器
使用的模块 threading.optparse.urllib2 本地需要放字典,名字需大写. 上代码 def request(url,pathName): try: import urllib2 p ...
- JavaScript 获取CSS媒体查询信息
var result = window.matchMedia('(max-width: 700px)'); if (result.matches) { console.log('页面宽度小于等于700 ...
- PHP设计模式笔记五:策略模式 -- Rango韩老师 http://www.imooc.com/learn/236
策略模式 1.概述:策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式称为策略模式 例如:一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有广告位展示不 ...
- Direct3D 11的资源
资源(Resource) 如果把渲染流水线比喻成汽车装配线,资源就是流水线上需要输入的东西. 资源可分为两类:Textures(纹理)和Buffers(缓冲区). Textures可以简单地分为1维, ...
- Python源码学习之初始化(三)-PyDictObject的初始化
先来看它的定义 typedef struct _dictobject PyDictObject; struct _dictobject { PyObject_HEAD Py_ssize_t ma_fi ...
- IT English Collection(9) of Objective-C
1 前言 今天我们来解除一篇有关Objective-C的介绍文章,详情如下. 2 详述 2.1 原文 Objective-C defines a small but powerful set of e ...