- 浏览: 354460 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (335)
- C++ (190)
- 设计模式 (43)
- 数据库技术 (5)
- 网络编程 (11)
- 自动化测试 (6)
- Linux (13)
- OpenSSL (10)
- MS Crypt API (5)
- SCM (2)
- English (4)
- Android (10)
- EMV规范 (1)
- Saturn Platform (0)
- C (10)
- SQL (2)
- ASP.NET (3)
- 英语口语学习 (3)
- 调试工具 (21)
- 编译技术 (5)
- UML (1)
- 项目管理 (5)
- 敏捷开发 (2)
- Http Server (6)
- 代码审查、代码分析 (5)
- 面试基础 (10)
- 重点知识 (16)
- STL (6)
- Efficient C++资料 (8)
- 数据结构和算法 (7)
- 读书笔记 (0)
- 开源项目 (4)
- 多线程 (2)
- Console App (6)
- 个人开源项目 (4)
- IBM DevelopWorks (4)
- Java (16)
- 内存泄漏相关调试和检测 (13)
- 软件测试相关技术 (2)
- C# (11)
- Apple Related (1)
- 软件测试和管理 (2)
- EMV (1)
- Python (1)
- Node.js (6)
- JavaScript (5)
- VUE (1)
- Frontend (1)
- Backend (4)
- RESTful API (3)
- Firebase (3)
最新评论
-
u013189503:
来个密码吧
[C++][Logging] 项目中写日志模块的实现 -
wyf_vc:
来个密码啊!!
[C++][Logging] 项目中写日志模块的实现
转自
http://www.cnblogs.com/mengdd/archive/2013/02/06/2908241.html
http://www.tuicool.com/articles/FrAF3m
鼠标监听器MouseListener
监听鼠标事件MouseEvent。
相应事件和处理方法
鼠标事件 处理方法
MOUSE_CLICKED MouseClicked (MouseEvent) 鼠标点击(单或双)
MOUSE_PRESSED MousePressed (MouseEvent) 鼠标按下
MOUSE_RELEASED MouseReleased(MouseEvent) 鼠标松开
MOUSE_ENTERED MouseEntered (MouseEvent) 鼠标进入(某组件区域)
MOUSE_EXITED MouseExited (MouseEvent) 鼠标离开(某组件区域)
鼠标事件MouseEvent常用方法
int getClickCount() 得到点击次数1 OR 2;
int getX(), int getY() 得到鼠标的(象素)位置。
鼠标监听器MouseMotionListener
对于鼠标的移动和拖放,另外用鼠标运动监听器MouseMotionListener。
因为许多程序不需要监听鼠标运动,把两者分开可简化程序。
相应事件和处理方法
鼠标事件 处理方法
MOUSE_MOVED MouseMoved (MouseEvent) 鼠标在移动
MOUSE_DRAGGED MouseDragged(MouseEvent) 鼠标被拖动
范例Java程序
我们把对这两个鼠标监听器综合运用。
事件模型相关概念
事件:描述发生了什么的对象。
存在各种不同类型的事件类用来描述各种类型的用户交互。
事件源:事件的产生器。
事件处理器:接收事件、解释事件并处理用户交互的方法。
比如在Button组件上点击鼠标会产生以这个Button为源的一个ActionEvent,这个ActionEvent实例是一个对象,它包含关于刚才发生的那个事件的信息,这些信息包括:
getActionCommand():返回与动作相关联的命令名称。
getWhen():返回事件发生的时间。
如果用户在用户界面层执行了一个动作(鼠标点击和按键),这将导致一个事件的发生。
AWT事件模型
JDK1.0的事件模型:层次模型。(已废弃)
JDK1.1或更高的事件模型:委托模型。
事件监听器:实现了监听器接口的类。一个监听器对象是一个实现了专门的监听器接口的类的实例。
下面是一个简单的代码例子,说明按钮事件的监听处理。
当单击一个按钮时,就会产生一个事件(ActionEvent),然后检查是否有与该按钮关联的事件处理器(实际上是一个方法),
如果没有,那么什么都不执行;
如果有的话,就会将该事件传递给与该按钮关联的事件处理器方法,作为该方法的参数,之后该事件处理方法就会自动得到调用,并且该方法可以使用传递过来的ActionEvent对象,进而获得事件发生时与该事件及事件源相关联的那些信息。
Java中的组件若想添加事件处理器,都会使用形如addXxxListener()的方法来添加。一个事件源可以添加多个监听器。
委托模型的优点
事件不会被意外地处理。
有可能创建并使用适配器(adapter)类对事件动作进行分类。
委托模型有利于把工作分布到各个类中。
几类具有典型代表意义的事件
MouseEvent,鼠标事件,鼠标按下、释放、点击等。
WindowEvent,窗口事件,点击关闭按钮,窗口得到与失去焦点,窗口最小化等。
ActionEvent,动作事件,不代表具体的动作,是一种语义。如按钮或菜单被鼠标单击,单行文本框中按下回车键等都可以看做是ActionEvent事件。
如果用户的一个动作导致了某个组件最基本的动作发生了,这就是ActionEvent事件。
对于每类事件,都会有一个接口(接口一般叫XxxListener),这个接口要求定义一个或多个方法。想接收这个事件的类必须实现这个接口,当发生这些事件时,就会调用这些方法。
关于事件处理的另一个例子:
参考资料
张龙老师Java SE视频教程。
本博客相关文章:
http://www.cnblogs.com/mengdd/archive/2012/09/08/2676587.html
http://www.cnblogs.com/mengdd/archive/2013/02/06/2908241.html
http://www.tuicool.com/articles/FrAF3m
鼠标监听器MouseListener
监听鼠标事件MouseEvent。
相应事件和处理方法
鼠标事件 处理方法
MOUSE_CLICKED MouseClicked (MouseEvent) 鼠标点击(单或双)
MOUSE_PRESSED MousePressed (MouseEvent) 鼠标按下
MOUSE_RELEASED MouseReleased(MouseEvent) 鼠标松开
MOUSE_ENTERED MouseEntered (MouseEvent) 鼠标进入(某组件区域)
MOUSE_EXITED MouseExited (MouseEvent) 鼠标离开(某组件区域)
鼠标事件MouseEvent常用方法
int getClickCount() 得到点击次数1 OR 2;
int getX(), int getY() 得到鼠标的(象素)位置。
鼠标监听器MouseMotionListener
对于鼠标的移动和拖放,另外用鼠标运动监听器MouseMotionListener。
因为许多程序不需要监听鼠标运动,把两者分开可简化程序。
相应事件和处理方法
鼠标事件 处理方法
MOUSE_MOVED MouseMoved (MouseEvent) 鼠标在移动
MOUSE_DRAGGED MouseDragged(MouseEvent) 鼠标被拖动
范例Java程序
我们把对这两个鼠标监听器综合运用。
package com.test0803; import java.awt.Color; import java.awt.Frame; import java.awt.Label; import java.awt.TextField; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Test_Mouse2 implements MouseMotionListener,MouseListener{ Frame frame = new Frame("关于鼠标的多重监听器"); TextField tField = new TextField(30); public Test_Mouse2(){ Label label = new Label("请按下鼠标左键并拖动"); frame.add(label, "North"); frame.add(tField, "South"); frame.setBackground(new Color(180, 255, 255)); frame.addMouseListener(this); frame.addMouseMotionListener(this); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { // TODO Auto-generated method stub System.exit(0); } }); frame.setSize(300, 200); frame.setLocation(400, 250); frame.setVisible(true); } public static void main(String[] args) { new Test_Mouse2(); } @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub System.out.print("鼠标点击----" + "\t"); if (e.getClickCount()==1) { System.out.println("单击!"); } else if (e.getClickCount()==2) { System.out.println("双击!"); } else if (e.getClickCount()==3) { System.out.println("三连击!!"); } } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub System.out.println("鼠标按下"); } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub System.out.println("鼠标松开"); } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub tField.setText("鼠标已经进入窗体"); } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub tField.setText("鼠标已经移出窗体"); } @Override public void mouseDragged(MouseEvent e) { // TODO Auto-generated method stub String string = "鼠标拖动到位置:(" + e.getX() + "," + e.getY() +")"; tField.setText(string); } @Override public void mouseMoved(MouseEvent e) { // TODO Auto-generated method stub } }
事件模型相关概念
事件:描述发生了什么的对象。
存在各种不同类型的事件类用来描述各种类型的用户交互。
事件源:事件的产生器。
事件处理器:接收事件、解释事件并处理用户交互的方法。
比如在Button组件上点击鼠标会产生以这个Button为源的一个ActionEvent,这个ActionEvent实例是一个对象,它包含关于刚才发生的那个事件的信息,这些信息包括:
getActionCommand():返回与动作相关联的命令名称。
getWhen():返回事件发生的时间。
如果用户在用户界面层执行了一个动作(鼠标点击和按键),这将导致一个事件的发生。
AWT事件模型
JDK1.0的事件模型:层次模型。(已废弃)
JDK1.1或更高的事件模型:委托模型。
事件监听器:实现了监听器接口的类。一个监听器对象是一个实现了专门的监听器接口的类的实例。
下面是一个简单的代码例子,说明按钮事件的监听处理。
import java.awt.BorderLayout; import java.awt.Button; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestButton { public static void main(String[] args) { Frame frame = new Frame("Test Button"); Button button = new Button("Press Me!"); // 增加事件处理器 button.addActionListener(new ButtonHandler()); // 将按钮加入frame frame.add(button, BorderLayout.CENTER); frame.pack(); frame.setVisible(true); } } class ButtonHandler implements ActionListener { @Override public void actionPerformed(ActionEvent e) { //事件处理器 System.out.println("Button is pressed!"); String label = e.getActionCommand(); System.out.println(label); } }
当单击一个按钮时,就会产生一个事件(ActionEvent),然后检查是否有与该按钮关联的事件处理器(实际上是一个方法),
如果没有,那么什么都不执行;
如果有的话,就会将该事件传递给与该按钮关联的事件处理器方法,作为该方法的参数,之后该事件处理方法就会自动得到调用,并且该方法可以使用传递过来的ActionEvent对象,进而获得事件发生时与该事件及事件源相关联的那些信息。
Java中的组件若想添加事件处理器,都会使用形如addXxxListener()的方法来添加。一个事件源可以添加多个监听器。
委托模型的优点
事件不会被意外地处理。
有可能创建并使用适配器(adapter)类对事件动作进行分类。
委托模型有利于把工作分布到各个类中。
几类具有典型代表意义的事件
MouseEvent,鼠标事件,鼠标按下、释放、点击等。
WindowEvent,窗口事件,点击关闭按钮,窗口得到与失去焦点,窗口最小化等。
ActionEvent,动作事件,不代表具体的动作,是一种语义。如按钮或菜单被鼠标单击,单行文本框中按下回车键等都可以看做是ActionEvent事件。
如果用户的一个动作导致了某个组件最基本的动作发生了,这就是ActionEvent事件。
对于每类事件,都会有一个接口(接口一般叫XxxListener),这个接口要求定义一个或多个方法。想接收这个事件的类必须实现这个接口,当发生这些事件时,就会调用这些方法。
关于事件处理的另一个例子:
import java.awt.BorderLayout; import java.awt.Button; import java.awt.Frame; import java.awt.Label; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.sql.Date; public class MyWindow implements MouseListener, MouseMotionListener { private Frame frame; private Label label; private Button button; private TextField textField; public void go() { frame = new Frame("My Frame"); // 加上窗口监听器,其中主要实现了退出功能 frame.addWindowListener(new MyWindowListener()); // 加一个标签 label = new Label("This is my Window"); frame.add(label, BorderLayout.NORTH); // 加一个按钮 button = new Button("MyButton"); frame.add(button, BorderLayout.WEST); // 设置按钮事件监听器,按钮按下时会向控制台输出信息 button.addActionListener(new MyButtonListener()); // 加一个文本编辑框 textField = new TextField(40); frame.add(textField, BorderLayout.SOUTH); // 加上鼠标动作监听器,因为类本身实现了这两个接口,所以参数是this frame.addMouseListener(this); frame.addMouseMotionListener(this); // 可以添加多个监听器,所以还可以定义其他的,如MyMouseListener类,然后加上 // 设置刚好能容纳这些控件的尺寸 frame.pack(); // 设置为可见 frame.setVisible(true); } public static void main(String[] args) { MyWindow window = new MyWindow(); window.go(); } @Override public void mouseDragged(MouseEvent e) { } @Override public void mouseMoved(MouseEvent e) { String str = "x = " + e.getX() + ", y = " + e.getY(); this.textField.setText(str); System.out.println(str); } @Override public void mouseClicked(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { this.textField.setText("the mouse has exited."); } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseReleased(MouseEvent e) { } } class MyButtonListener implements ActionListener { @SuppressWarnings("deprecation") @Override public void actionPerformed(ActionEvent e) { // 输出信息 System.out.println("The Button is pressed!"); // 输出时间戳 Long time = e.getWhen(); System.out.println("timestamp: " + time); // 日期时间 Date date = new Date(time); System.out.println(date.toLocaleString()); } } class MyWindowListener implements WindowListener { @Override public void windowActivated(WindowEvent e) { } @Override public void windowClosed(WindowEvent e) { } @Override public void windowClosing(WindowEvent e) { System.out.println("windowClosing"); // 退出 System.exit(0); } @Override public void windowDeactivated(WindowEvent e) { } @Override public void windowDeiconified(WindowEvent e) { } @Override public void windowIconified(WindowEvent e) { } @Override public void windowOpened(WindowEvent e) { } }
参考资料
张龙老师Java SE视频教程。
本博客相关文章:
http://www.cnblogs.com/mengdd/archive/2012/09/08/2676587.html
发表评论
-
[轉]java中String的“==”和equals判断相等性
2017-11-27 15:24 413http://blog.csdn.net/liucheng20 ... -
Android NDK搭建環境
2017-11-27 13:25 530https://www.cnblogs.com/ut2016- ... -
Java语言编码规范
2017-06-27 15:54 531http://morningspace.51.net/reso ... -
Java AWT应用示例 - 持续更新
2017-06-27 11:39 594/* * @(#)SampleAWT.java ... -
Java中基本数据类型和包装器类型的关系
2017-06-27 08:37 721转自 http://www.cnblogs.com/h ... -
深入剖析Java中的装箱和拆箱
2017-06-27 08:31 442转自 http://www.cnblogs.com/dolph ... -
Java JAR打包相关
2017-06-26 20:57 541JAVA jar打包时MANIFEST.MF格式约定 http ... -
Java反编译工具 - Java Decompiler
2017-06-21 20:14 419http://jd.benow.ca/ JD-GUI is ... -
javac,使用"-d ."与省略-d的区别
2017-06-20 20:27 750在当前工作目录下生成class文件,一般情况下有两种方法 ... -
JAVA环境变量配置
2017-06-19 13:56 309参考Link http://www.cnblogs.com/x ... -
JAVA高级应用之反射
2017-06-19 10:26 400参考链接 http://www.cnblogs.com/men ... -
Java高级应用之JNI
2017-06-19 09:00 543参考link http://www.cnblogs.com/l ... -
JDK工具appletviewer详解
2017-06-19 08:25 1048http://www.softown.cn/post/170. ... -
Java rt.jar 源码分析
2017-06-18 10:32 586jdk1.8.0_102 SRC +com +java ... -
C/C++内存分配方式与存储区
2016-08-28 16:26 1007转自 http://blog.csdn.net/zheng05 ... -
http://baiy.cn/doc/cpp/index.htm#代码风格与版式_函数
2016-07-30 13:44 483转自 http://baiy.cn/doc/cpp/index ... -
应用 Command 模式进行流水号管理的最佳实践
2016-07-10 18:02 567转自 http://www.ibm.com/devel ... -
c++的类中typedef的作用
2016-07-05 21:01 1046转自 http://blog.chinaunix.net/ui ... -
C/C++程序为例内存分布详解
2016-06-28 09:06 841转自 http://www.cnblogs.com/q ... -
浅谈算法和数据结构: 平衡查找树之红黑树
2016-06-27 11:45 561转自 http://www.cnblogs.com/yange ...
相关推荐
第8版针对Java SE 6平台进行了全面更新,囊括了Java 2平台、标准版(J2SE)的全部基础知识,提供了大量完整且具有实际意义的应用实例,详细介绍了Java语言基础知识、面向对象程序设计、接口与内部类、事件监听器模型、...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...
示例描述:本章介绍开发Java的基础语法知识。 accumulationByDoWhile.java 用do~while语句写的累加程序 accumulationByFor.java 用for语句写的累加程序 accumulationByWhile.java 用while语句写的累加程序 ...
着力让读者在充分理解Java语言和Java类库的基础上,灵活应用Java提供的高级特性,具体包括面向对象程序设计、反射与代理、接口与内部类、异常处理、泛型程序设计、集合框架、事件监听器模型、图形用户界面设计和并发...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...
目 录 第一章 JAVA入门 10 计算机语言发展史 10 机器语言 10 汇编语言 10 高级语言 10 其他高级语言 11 ...事件监听器常见的定义形式 233 AWT其他组件 233 菜单的实现 233 特点 233 代码示例和效果 233
囊括了Java平台标准版(JavaSE/J2SE)的全部基础知识,提供了大量完整且具有实际意义的应用实例,详细介绍了Java语言基础知识、面向对象程序设计、接口与内部类、事件监听器模型、swing图形用户界面程序设计、打包应用...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...
3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...
本书是Java技术经典参考书,多年畅销不衰,第7版在保留以前版本风格的基础上,涵盖Java 2开发平台标准版J2SE 5.0的基础知识,主要内容包括面向对象程序设计、反射与代理、接口与内部类、事件监听器模型、使用Swing ...
广播式事件的监听器只有注册后,才会收到注册前的所有未被消费的历史事件。(单次式事件注册时就可以读取历史事件) 单次式事件(持久化事件) 一个事件只能被 一个监听器 或者 多个监听同一事件并且逻辑相同的监听器组 ...
本书是Java技术经典参考书,多年畅销不衰,第7版在保留以前版本风格的基础上,涵盖Java2开发平台标准版J2SE5.0的基础知识,主要内容包括面各对象程序设计、反射与代理、接口与内部类、事件监听器模型、使用Swing UI...
本书是Java技术经典参考书,多年畅销不衰,第7版在保留以前版本风格的基础上,涵盖Java2开发平台标准版J2SE5.0的基础知识,主要内容包括面各对象程序设计、反射与代理、接口与内部类、事件监听器模型、使用Swing UI...
本书是Java技术经典参考书,多年畅销不衰,第7版在保留以前版本风格的基础上,涵盖Java2开发平台标准版J2SE5.0的基础知识,主要内容包括面各对象程序设计、反射与代理、接口与内部类、事件监听器模型、使用Swing UI...
本书是Java技术经典参考书,多年畅销不衰,第7版在保留以前版本风格的基础上,涵盖Java2开发平台标准版J2SE5.0的基础知识,主要内容包括面各对象程序设计、反射与代理、接口与内部类、事件监听器模型、使用Swing UI...
本书是Java技术经典参考书,多年畅销不衰,第7版在保留以前版本风格的基础上,涵盖Java2开发平台标准版J2SE5.0的基础知识,主要内容包括面各对象程序设计、反射与代理、接口与内部类、事件监听器模型、使用Swing UI...
本书是Java技术经典参考书,多年畅销不衰,第7版在保留以前版本风格的基础上,涵盖Java2开发平台标准版J2SE5.0的基础知识,主要内容包括面各对象程序设计、反射与代理、接口与内部类、事件监听器模型、使用Swing UI...