Java界面编程—事件监听机制
组件首先要先注册事件处理器,当用户单击组件、移动鼠标或者敲击键盘时都会产生事件(Event),一旦有时间发生,应用程序就会做出对该事件的响应,这些组件就是事件源(Event source)。
接受、解析和处理事件,实现和用户交互的方法称为事件处理器(Event handler)。
事件源(即组件)可以产生多种不同类型的事件,也可以注册多种不同类型的事件监听器,当事件源(组件)上发生某种事件,生成相应的事件对象,该对象中封装了有关该事件的各种信息。该对象被传递到相应的注册的事件处理器,此时事件的处理方法才执行。
事件源:就是 awt 包或 swing 包中的那些图形界面的组件(如按钮、文本框、单选框等)
事件:每个事件源都有自己特定的对应事件和共性事件
监听器:可以发出某一个事件的动作都已经封装到监听器中
事件处理:触发事件后的处理方式
事件监听处理的四种方法
-- 自身类实现 ActionListener 接口,作为事件监听器。但如果容器中有多个监听处理部分时,需要一个一个去判断事件源,因此会影响程序性能。不建议使用。
-- 通过匿名类处理。如果容器的监听事件比较少是,该方式很合适;但当监听事件较多时,会造成代码可读性差。
-- 通过内部类处理。该方式符合面向对象编程(可以设置内部类只允许自身类适用,而且方便自身类的资源),尤其适合需要处理多个监听事件的情形,可读性也很好。
-- 通过外部类处理。当多个监听事件相同时,可以选用此种方式。
自身类实现 ActionListener 接口,作为事件监听器
package listener; import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame; public class EventListener1 extends JFrame implements ActionListener { // 自身类实现 ActionListener 接口,作为事件监听器
private static final long serialVersionUID = 1L;
private JButton btBlue;
private JButton btDialog; public EventListener1() { // 构造器
setTitle("Java GUI 时间监听处理"); // 设置标题栏内容
setBounds(100, 100, 500, 350); // 设置初始化窗口位置
setLayout(new FlowLayout()); // 设置布局管理器
btBlue = new JButton("蓝色"); // 创建一个按钮
btBlue.addActionListener(this); // 将按钮添加事件监听器
btDialog = new JButton("弹窗"); // 创建一个按钮
btDialog.addActionListener(this); // 将按钮添加事件监听器
add(btBlue); // 将按钮添加到 JFrame 容器上
add(btDialog); // 将按钮添加到 JFrame 容器上
setVisible(true); // 设置窗口可视化
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗口关闭
} @Override
public void actionPerformed(ActionEvent ae) { // 事件处理
if (ae.getSource() == btBlue) { // 判断最初发生 Event 事件的对象
Container container = getContentPane(); // 获取容器
container.setBackground(Color.blue); // 设置容器背景颜色
} else if (ae.getSource() == btDialog) { // 判断最初发生 Event 事件的对象
JDialog dialog = new JDialog(); // 创建 JDialog 窗口对象
dialog.setBounds(300, 200, 400, 300);
dialog.setVisible(true);
}
} public static void main(String[] args) {
new EventListener1(); // 创建 EventListener1 对象
}
}
通过匿名类处理事件监听
package listener; import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame; public class EventListener2 extends JFrame { private static final long serialVersionUID = 1L;
private JButton btBlue;
private JButton btDialog; public EventListener2() { // 构造器
setTitle("Java GUI 事件监听处理"); // 设置标题栏内容
setBounds(100,100,500,350); // 设置初始化窗口位置
setLayout(new FlowLayout()); // 设置窗口布局
btBlue = new JButton("蓝色"); // 创建一个按钮
btBlue.addActionListener(new ActionListener() { // 添加事件监听器,此处是匿名内部类
@Override
public void actionPerformed(ActionEvent e) { // 事件处理
Container container = getContentPane(); // 获得容器
container.setBackground(Color.blue); // 设置容器背景色
}
});
btDialog = new JButton("弹框"); // 创建一个按钮
btDialog.addActionListener(new ActionListener() { // 添加事件监听器,此处是匿名内部类
@Override
public void actionPerformed(ActionEvent e) { // 事件处理
JDialog dialog = new JDialog(); // 创建一个 JDialog 窗口对象
dialog.setBounds(300,200,400,300);
dialog.setVisible(true);
}
});
add(btBlue); // 将按钮添加到 JFrame 容器中
add(btDialog); // 将按钮添加到 JFrame 容器中
setVisible(true); // 设置窗口可视化
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗口关闭
}
public static void main(String[] args) {
new EventListener2(); // 创建 EventListener2 对象
}
}
通过内部类处理事件监听
package listener; import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame; public class EventListener3 extends JFrame { private static final long serialVersionUID = 1L;
private JButton btBlue;
private JButton btDialog; public EventListener3() { // 构造方法
setTitle("Java GUI 事件监听处理"); // 设置标题栏内容
setBounds(100,100,500,350); // 设置初始化窗口位置
setLayout(new FlowLayout()); // 设置容器布局
btBlue = new JButton("蓝色"); // 创建一个按钮
btBlue.addActionListener(new ColorEventListener()); // 按钮添加事件监听器
btDialog = new JButton("弹窗"); // 创建一个按钮
btDialog.addActionListener(new DialogEventListener()); // 按钮添加事件监听器
add(btBlue); // 将按钮添加到容器中
add(btDialog); // 将按钮添加到容器中
setVisible(true); // 设置容器可视化
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗口关闭
}
class ColorEventListener implements ActionListener{ // 使用内部类
@Override
public void actionPerformed(ActionEvent e) { // 事件执行
Container container = getContentPane();
container.setBackground(Color.blue);
}
}
class DialogEventListener implements ActionListener { // 使用内部类
@Override
public void actionPerformed(ActionEvent e) { // 事件执行
JDialog dialog = new JDialog();
dialog.setBounds(300, 200, 400, 300);
dialog.setVisible(true);
}
}
public static void main(String[] args) {
new EventListener3(); // 创建 EventListener3 实例对象
}
}
通过外部类处理事件监听
package listener; import java.awt.FlowLayout; import javax.swing.JButton;
import javax.swing.JFrame; public class EventListener4 extends JFrame { private static final long serialVersionUID = 1L;
private JButton btBlue;
private JButton btDialog; public EventListener4() {
setTitle("Java GUI 事件监听处理");
setBounds(100, 100, 500, 350);
setLayout(new FlowLayout());
btBlue = new JButton("蓝色");
btBlue.addActionListener(new ColorEventListener(this));
btDialog = new JButton("弹窗");
btDialog.addActionListener(new DialogEventListener());
add(btBlue);
add(btDialog);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} public static void main(String[] args) {
new EventListener4();
}
} // 外部类
package listener; import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; public class ColorEventListener implements ActionListener {
private EventListener4 el; public ColorEventListener(EventListener4 el) {
this.el = el;
}
@Override
public void actionPerformed(ActionEvent arg0) {
Container container = el.getContentPane();
container.setBackground(Color.blue);
}
}
// 外部类
package listener; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JDialog; public class DialogEventListener implements ActionListener { @Override
public void actionPerformed(ActionEvent arg0) {
JDialog dialog = new JDialog();
dialog.setBounds(300, 200, 400, 300);
dialog.setVisible(true);
}
}
效果

Java界面编程—事件监听机制的更多相关文章
- java Gui编程 事件监听机制
1. GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式: 1. 命令交互方式 图书管理系统 ...
- 4.JAVA之GUI编程事件监听机制
事件监听机制的特点: 1.事件源 2.事件 3.监听器 4.事件处理 事件源:就是awt包或者swing包中的那些图形用户界面组件.(如:按钮) 事件:每一个事件源都有自己特点有的对应事件和共性事件. ...
- Java中的事件监听机制
鼠标事件监听机制的三个方面: 1.事件源对象: 事件源对象就是能够产生动作的对象.在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象.Java中根据事件的动作来区分不同的事件源对象,动 ...
- Java 中的事件监听机制
看项目代码时遇到了好多事件监听机制相关的代码.现学习一下: java事件机制包含三个部分:事件.事件监听器.事件源. 1.事件:继承自java.util.EventObject类,开发人员自己定义. ...
- JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件
JAVA之旅(三十一)--JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件 有段时间没有更新JAVA了,我们今天来说一下JAVA中的图形化界面,也就是GUI ...
- GUI编程笔记(java)05:GUI事件监听机制原理和举例说明
1.事件监听机制: A:事件源 事件发生的地方 B:事件 就是要发生的事情 C:事件处理 就是针对发生的事情做 ...
- JAVA 图形开发之计算器设计(事件监听机制)
/*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 前段时间刚帮同学用MFC写了个计算器,现在学到JAVA的图形开发,就试着水了一个计算器出来.(可以说 ...
- JAVA事件监听机制的实现
今天学习了java的事件编程机制,略有体会,先在此记下心得. 第一,首先明确几个概念. 事件源:一个产生或者触发事件的对象.事件:承载事件源状态改变时的信息对象.事件监听器接口:实际上就是一个类,该类 ...
- 创建图形用户界面GUI和事件监听机制的简单实现(java)
创建图形化界面 1.创建Frame窗体 2.对窗体进行基本设置 比如:大小.位置.布局 3.定义组件 4.将组建通过窗体添加到窗体中 5.让窗体显示,通过setVisib ...
随机推荐
- 1.3.7、CDH 搭建Hadoop在安装之前(端口---第三方组件使用的端口)
第三方组件使用的端口 在下表中,每个端口的“ 访问要求”列通常是“内部”或“外部”.在此上下文中,“内部”表示端口仅用于组件之间的通信; “外部”表示该端口可用于内部或外部通信. Component ...
- Linux下SVN server 的使用及权限配置
[Linux下SVN server 的使用及权限配置] 参考:http://www.cnblogs.com/heinoc/p/3805779.html
- python生成Excel图表(通过xlsxwriter)
前面介绍了pandas的简单用法,pandas的数据可以通过matlab第三方包将数据生成报表,但是我想将报表生成在Excel中,这时候就可以借助xlsxwriter第三方包来生成图标 缺点:xl ...
- 【Django】关于前端配置
今天在网上课程了学了一下前端配置,感觉搭这个环境安装了不少东西,自己都有点混乱,现在整理一下思路: 1.nvm 即Note Version Manager用来管理node版本的工具: windows版 ...
- java面试:手写代码
二分查找法. /** * 二分查找法:给定一组有序的数组,每次都从一半中查找.直到找到要求的数据. * 主要是得找到下标的表示方法. */ public class BinaryFind { /** ...
- numpy 之矩阵的认知
di numpy 矩阵的创建与应用 可以用np.mat(a) 将a转变成矩阵 矩阵的加减法和 array相同 矩阵的乘法,如果矩阵要相乘的话就要A矩阵的行数,和B矩阵的列数相同才可以 这是查看数组不重 ...
- Java项目--俄罗斯方块
Java项目--俄罗斯方块 百度盘链接 链接:http://pan.baidu.com/s/1mhQ9SYc 密码:9ujo 一.心得 二.游戏实例 游戏截图 目录结构 三.代码 1.主界面 Tetr ...
- js正则表达式中的正向肯定预查和正向否定预查
对于没有使用过这几个表达式的人,应该对这个概念都有点不太理解,下面就以实际例子说明这几个表达式的用户. 一.?:pattern——匹配检验:会作为匹配校验,是一个非获取匹配,并出现在匹配字符结果里面, ...
- 专项测试——移动app安装包检测
一.背景和现状 安装包的重要性无需多提,针对安装包质量控制越来越严格和规范,包括证书.文件大小.安装成功率等,APP的证书及混淆是影响APP的安装成功率及代码安全性的很大因素,随着功能迭代,安装包也会 ...
- 在linux 中启动anaconda
anaconda-navigator $ source ~/anaconda3/bin/activate root ###在bin 目录下打开终端 敲 ./activate root $ a ...