java 事件监听机制组成
事件源(组件)
事件(Event)
监听器(Listener)
事件处理(引发事件后处理方式)
事件监听机制流程图
务必记牢:
确定事件源(容器或组件)
通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
一般用匿名内部类来表示。
在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)
事件源:就是awt包或者swing包中的那些图形界面组件。
事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。
以上三者,在java中都已经定义好了。直接获取其对象来用就可以了。
我们要做的事情是,就是对产生的动作进行处理。
Eg:
package june610;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
class MyWin extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.out.println("hahahha");
System.exit(0);
}
}
public class FrameDemo {//如果写成内部类的形式那么前面必须加上public static,因为主方法是静态的,不能调用动态类或者方法
public static void main(String[] args) {
//设置窗体
Frame f = new Frame("窗体");
f.setSize(400, 300);
f.setLocation(500, 300);//距离左侧,距离上面
/**可以用这个方法一次性设置
* setBounds(int x, int y, int
width, int height) 移动组件并调整其大小。
*/
Button b = new Button("按钮");
Button b2 = new Button("按钮2");
TextField tf = new TextField(20);
f.add(b);//把按钮添加到窗体上
f.add(b2);//把按钮添加到窗体上
f.add(tf);//在窗体上的的顺序按照添加的顺序
f.setLayout(new FlowLayout());//设置容器的布局管理器
//f.addWindowListener(new
MyWin());
b.addActionListener(new ActionListener(){//通过匿名内部类,方便 添加动作监听器
public void actionPerformed(ActionEvent e) {
System.out.println("按钮把界面关闭了");
//System.exit(0);
}
});
//鼠标
b.addMouseListener(new MouseAdapter() {//鼠标动作监听器
int count = 1;
public void mouseEntered(MouseEvent e){
System.out.println("鼠标进入"+(count++)+"次!");
}
});
b.addMouseListener(new MouseAdapter(){//和上面的一样,可以写在一起
int clickCount = 1;
public void mouseClicked(MouseEvent e){
if(e.getClickCount() == 2){
System.out.println("双击动作"+clickCount++);
}
}
});
/*
f.addWindowListener(new
WindowAdapter()//匿名内部类的写法
{
public void windowClosing(WindowEvent e)
{
System.out.println("我关");
System.exit(0);
}
public void windowActivated(WindowEvent e)
{
System.out.println("我活了。");
}
public void windowOpened(WindowEvent e)
{
System.out.println("我被打开了,hahahhahah");
}
});*/
//键盘:
b2.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e)
{
System.out.println("键盘的作用");//用鼠标按没反应,
System.out.println(e.getKeyChar()+"---"+e.getKeyCode());//f---70等、
if(e.getKeyCode() == 27){//按住esc键退出
System.out.println("ESC键把我关闭了!");
System.exit(0);
}
//组合键去关闭
CTRL + ENTER
if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER){
System.out.println("CTRL + ENTER组合键把我关闭了!");
System.exit(0);
}
}
});
//文本框
tf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e){
if(!(e.getKeyCode()>=KeyEvent.VK_0 &&
e.getKeyCode()<=KeyEvent.VK_9)){
System.out.println(e.getKeyChar()+"不符合是数字!");
}
}
});
f.setVisible(true);//设置可见性
}
}
Eg://列出文件夹内全部的文件
package june610;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
class MyFrame {
private
Frame f;
private
Button b;
private
TextField tf;
private
TextArea ta;
MyFrame()
{
init();
}
void
init() {
f = new Frame("我的电脑");
f.setBounds(300, 100, 600, 500);
f.setLayout(new FlowLayout());
b = new Button("转到");
tf = new TextField(60);
ta = new TextArea(25, 70);
f.add(tf);
f.add(b);
f.add(ta);
f.setVisible(true);
action();
}
//窗体上的操作
void
action() {
f.addWindowListener(new WindowAdapter() {
public
void windowClosing(WindowEvent e) {
System.exit(0);
}
});
buttonAction();
keyAction();
}
void
keyAction(){
//设置键盘监听器,当输入enter键的时候实现和点击鼠标同样的功能!
b.addKeyListener(new KeyAdapter() {
public
void keyPressed(KeyEvent e){
//if(e.getKeyCode() == 10){
//buttonAction();
//}
String dirPath = tf.getText();// 获取文本(我们想验证的是路径),接下来获取文件
File file = new File(dirPath);// 获取文件
if (file.exists() &&
file.isDirectory()) {// 判断,存在否以及是否是文件夹
ta.setText("");//
如果符合条件的话,清空以前的数据;
String[]
names = file.list();
for
(String name : names) {
ta.append(name + "\r\n");
}
System.out.println("=======");
} else {
ta.setText("");
ta.append("对不起,请确认您输入的是路径!");
}
System.out.println(e.getKeyCode());
}
});
tf.addActionListener(new ActionListener() {
public
void actionPerformed(ActionEvent e) {
String dirPath = tf.getText();// 获取文本(我们想验证的是路径),接下来获取文件
File file = new File(dirPath);// 获取文件
if (file.exists() &&
file.isDirectory()) {// 判断,存在否以及是否是文件夹
ta.setText("");//
如果符合条件的话,清空以前的数据;
String[]
names = file.list();
for
(String name : names) {
ta.append(name + "\r\n");
}
System.out.println("=======");
} else {
ta.setText("");
ta.append("对不起,请确认您输入的是路径!");
}
}
});
}
void
buttonAction() {
b.addActionListener(new ActionListener() {
public
void actionPerformed(ActionEvent e) {
String dirPath = tf.getText();// 获取文本(我们想验证的是路径),接下来获取文件
File file = new File(dirPath);// 获取文件
if (file.exists() &&
file.isDirectory()) {// 判断,存在否以及是否是文件夹
ta.setText("");//
如果符合条件的话,清空以前的数据;
String[]
names = file.list();
for
(String name : names) {
ta.append(name + "\r\n");
}
System.out.println("=======");
} else {
ta.setText("");
ta.append("对不起,请确认您输入的是路径!");
}
}
});
}
}
public class FrameDemo3 {
public
static void main(String[] args) {
new MyFrame();
}
}
java 事件监听机制组成的更多相关文章
- java事件监听机制
1.简单的事件监听 package demo2; /* * java事件监听机制 */ import java.awt.*; import javax.swing.*; import java.awt ...
- java事件监听机制2
今天早上的两点收获: 1.addActionListener(其中的setActionCommand函数就是要对对象进行唯一性的标记,便于消息传来后进行处理.理论上actionlistener可以全部 ...
- JAVA事件监听机制的实现
今天学习了java的事件编程机制,略有体会,先在此记下心得. 第一,首先明确几个概念. 事件源:一个产生或者触发事件的对象.事件:承载事件源状态改变时的信息对象.事件监听器接口:实际上就是一个类,该类 ...
- Java事件监听机制与观察者设计模式
一. Java事件监听机制 1. 事件监听三要素: 事件源,事件对象,事件监听器 2. 三要素之间的关系:事件源注册事件监听器后,当事件源上发生某个动作时,事件源就会调用事件监听的一个方法,并将事件对 ...
- JAVA事件监听机制学习
//事件监听机制 import java.awt.*; import java.awt.event.*; public class TestEvent { public static void mai ...
- JAVA事件监听机制与实现
事件监听机制的实现:参考图:事件模型_ActionEvent 为了节省资源,系统无法对某个事件进行实时的监听.故实现的机制是当发生某个事件后,处理代码将被自动运行,类似钩子一般.(回调函数) 事件有许 ...
- java事件监听机制(自定义事件)
java中的事件机制的参与者有3种角色: 1.event object:事件状态对象,用于listener的相应的方法之中作为参数,一般存在与listerner的方法之中 2.event source ...
- 【转】java事件监听机制
java中的事件机制的参与者有3种角色: 1.event object:事件状态对象,用于listener的相应的方法之中作为参数,一般存在与listerner的方法之中 2.event source ...
- java Gui编程 事件监听机制
1. GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式: 1. 命令交互方式 图书管理系统 ...
随机推荐
- PHP文件载入和载入路径
一.文件载入 所谓的文件的载入,就是指将需要的目标文件的代码载入到当前的位置上,从某种意义上来说,文件载入也是一种流程控制! 文件载入的主要目的是体现网站的分层设计,因为不同的页面有很多相同的区域(相 ...
- Directx11教程(67) 显示模型文件
原文:Directx11教程(67) 显示模型文件 在前面的教程中,我们都是通过在ModelClass中直接产生顶点和索引数据,简单的三角形,立方体等等还好说,毕竟比较简单,如何显示复杂的 ...
- Jmeter VS LR参数取值方式和迭代方式
Jmeter的参数化 Jmeter中的参数就是变量. 变量的来源:测试计划.UDV.CSV.函数.正则表达式.数据库. 以Jmeter的CSV文件参数化为例:
- win2003开启ftp
首先你要添加IIS,然后才可以启动配置FTP,步骤如下: 1.控制面板→添加或删除程序→添加/删除windows组件: 2.在弹出的windows组件向导窗口中,选择并勾选“应用程序服务器”,然后点击 ...
- JavaScript--查看代码运行效率console.time()与console.timeEnd()用法
程序运行时间计算: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- JavaScript--DOM操作例子:隔行变色
上效果: 实现思想: 主要是js动态创建标签,还有动态结合css实现样式 <!DOCTYPE html> <html lang="en"> <head ...
- centos7.3 docker安装grafana
一.编写docker-cmpose文件 docker-compose.yml文件如下: version: "3.3" services: grafana: image: grafa ...
- Person Re-identification 系列论文笔记(三):Improving Person Re-identification by Attribute and Identity Learning
Improving Person Re-identification by Attribute and Identity Learning Lin Y, Zheng L, Zheng Z, et al ...
- GIAC2019 演讲精选 | 面向未来的黑科技——UI2CODE闲鱼基于图片生成跨端代码
一直以来, 如何从‘视觉稿’精确的还原出 对应的UI侧代码 一直是端侧开发同学工作里消耗比较大的部分,一方面这部分的工作 比较确定缺少技术深度,另一方面视觉设计师也需要投入大量的走查时间,有大量无谓的 ...
- 测试安装phpmyadmin4.0
在测试环境准备测试安装phpmyadmin,测试环境上为一台zabbix 3.4的服务器,已经安装lamp环境. 根据安装文档,从phpmyadmin官网上下载了4.0版本,复制到/var/www/h ...