java中的四种监听类用法
在此列举四种方法:
自身类实现ActionListener接口,作为事件监听器
通过匿名类处理
通过内部类处理
通过外部类处理
下面依次介绍:
第一种:自身类实现ActionListener接口,作为事件监听器。
这种方法是最基本的,也是初学者经常使用的,我当初即是如此。
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 {
private JButton btBlue, 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);
// 把按钮容器添加到JFrame容器上
add(btBlue);
add(btDialog);
// 设置窗口可视化
setVisible(true);
// 设置窗口关闭
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//
***************************事件处理***************************
@Override
public void actionPerformed(ActionEvent e)
{
// 判断最初发生Event事件的对象
if (e.getSource() == btBlue) {
// 获得容器
Container c = getContentPane();
// 设置容器背景颜色
c.setBackground(Color.BLUE);
}
else if (e.getSource() == btDialog)
{
// 创建JDialog窗口对象
JDialog dialog = new JDialog();
dialog.setBounds(300, 200, 400,
300);
dialog.setVisible(true);
}
}
//
***************************主方法***************************
public static void main(String[] args)
{
new EventListener1();
}
}
第二种,通过匿名类处理。
这是比较好的一种方法,我是在2011年开始使用这种方法的。
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 JButton btBlue, 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 c = getContentPane();
c.setBackground(Color.BLUE);
}
});
// 创建按钮对象,并添加事件监听器
btDialog = new JButton("弹窗");
btDialog.addActionListener(new
ActionListener() {
// 事件处理
@Override
public void actionPerformed(ActionEvent e)
{
// 创建JDialog窗口对象
JDialog dialog = new JDialog();
dialog.setBounds(300, 200, 400,
300);
dialog.setVisible(true);
}
});
// 把按钮容器添加到JFrame容器上
add(btBlue);
add(btDialog);
// 设置窗口可视化
setVisible(true);
// 设置窗口关闭
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//
***************************主方法***************************
public static void main(String[] args)
{
new EventListener2();
}
}
第三种:通过内部类处理。
该种方法更符合面向对象编程的思想。
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 JButton btBlue, 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());
// 把按钮容器添加到JFrame容器上
add(btBlue);
add(btDialog);
// 设置窗口可视化
setVisible(true);
// 设置窗口关闭
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//
内部类ColorEventListener,实现ActionListener接口
class ColorEventListener implements
ActionListener {
@Override
public void actionPerformed(ActionEvent e)
{
Container c = getContentPane();
c.setBackground(Color.BLUE);
}
}
//
内部类DialogEventListener,实现ActionListener接口
class DialogEventListener implements
ActionListener {
@Override
public void actionPerformed(ActionEvent e)
{
// 创建JDialog窗口对象
JDialog dialog = new JDialog();
dialog.setBounds(300, 200, 400,
300);
dialog.setVisible(true);
}
}
//
***************************主方法***************************
public static void main(String[] args)
{
new EventListener3();
}
}
第四种:通过外部类处理
这种我个人不常用。
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 EventListener4 extends JFrame
{
private JButton btBlue, 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());
// 把按钮容器添加到JFrame容器上
add(btBlue);
add(btDialog);
// 设置窗口可视化
setVisible(true);
// 设置窗口关闭
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//
***************************主方法***************************
public static void main(String[] args)
{
new EventListener4();
}
}
//
外部类ColorEventListener,实现ActionListener接口
class ColorEventListener implements
ActionListener {
private EventListener4 el;
ColorEventListener(EventListener4 el)
{
this.el = el;
}
@Override
public void actionPerformed(ActionEvent e)
{
Container c = el.getContentPane();
c.setBackground(Color.BLUE);
}
}
//
外部类DialogEventListener,实现ActionListener接口
class DialogEventListener implements
ActionListener {
@Override
public void actionPerformed(ActionEvent e)
{
// 创建JDialog窗口对象
JDialog dialog = new JDialog();
dialog.setBounds(300, 200, 400,
300);
dialog.setVisible(true);
}
}
你可能注意到为什么我写了两个监听事件,就是加以区分这些方法的区别:
第一种的监听处理部分,如果有多个(我就写过三十多个的事件监听,包含菜单栏按钮事件监听和工具栏按钮事件监听),那就需要一个个去判断,从理论上说是影响程序速度的。
第二种和第三种比较常用,如果程序的监听事件比较少,可以用第二种,匿名类很合适。
第三种符合面向对象编程(可以设置内部类只提供自身类使用,而且方便使用自身类的资源),尤其是适合多个监听事件的处理,当然也适合第二种方法情况。
第四种是外部类,如果多个监听事件相同,就可以选用此种方法。
个人愚见:建议初学者掌握这四种方法,侧重于第二、三种。怎么学不重要,重要的是达到目的,使自己的GUI编程运用自如。多编程,多思考,提升编程思想;多看别人的代码,取其精华,有很大帮助!
java中的四种监听类用法的更多相关文章
- 关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用
http://blog.csdn.net/5iasp/article/details/37054171 文章标题:关于JAVA中事件分发和监听机制实现的代码实例 文章地址: http://blog.c ...
- JAVA基础学习之throws和throw的区别、Java中的四种权限、多线程的使用等(2)
1.throws和throw的区别 throws使用在函数外,是编译时的异常,throw使用在函数内,是运行时的异常 使用方法 public int method(int[] arr) throws ...
- JAVA中的四种引用以及ReferenceQueue和WeakHashMap的使用示例
简介: 本文主要介绍JAVA中的四种引用: StrongReference(强引用).SoftReferenc(软引用).WeakReferenc(弱引用).PhantomReference(虚引用) ...
- Java中的四种引用
引用定义 实际上,Java中存在四种引用,它们由强到弱依次是:强引用.软引用.弱引用.虚引用.下面我们简单介绍下这四种引用: 强引用(Strong Reference):通常我们通过new来创建一个新 ...
- JAVA中的四种JSON解析方式详解
JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...
- Java 中的四种引用
1.强引用(Strong Reference)在 Java 中四种引用中是“最强”的,我们平时通过 new 关键字创建的对象都属于强引用,如下面的代码: Person person = new Per ...
- Java 中的四种引用及垃圾回收策略
Java 中有四种引用:强引用.软引用.弱引用.虚引用: 其主要区别在于垃圾回收时是否进行回收: 1.强引用 使用最普遍的引用.如果一个对象具有强引用,那就 类似于必不可少的生活用品,垃圾回收器绝不会 ...
- Java中的四种内部类
Java中有四种内部类: 成员内部类:定义在另一个类(外部类)的内部,而且与成员属性和方法平级,故称成员内部类.类比于外部类的非静态方法,如果用static修饰就变成了静态内部类 静态内部类:使用st ...
- 简述Java中Http/Https请求监听方法
一.工欲善其事必先利其器 做Web开发的人总免不了与Http/Https请求打交道,很多时候我们都希望能够直观的的看到我们发送的请求参数和服务器返回的响应信息,这个时候就需要借助于某些工具啦.本文将采 ...
随机推荐
- 小小知识点(二十)利用MATLAB计算定积分
一重定积分 1. Z = trapz(X,Y,dim) 梯形数值积分,通过已知参数x,y按dim维使用梯形公式进行积分 %举例说明1 clc clear all % int(sin(x),0,pi) ...
- 如何在oracle中缩小临时表空间?ORA-01652无法在表空间中扩展temp
查询临时表空间有多大: SQL> SELECT tablespace_name, file_name, bytes FROM dba_temp_files WHERE tablespace_na ...
- java反射-- Field 用法实践
java 反射是一种常用的技术手段, 通过加载类的字节码的方式来获取相关类的一些信息 比如成员变量, 成员方法等. Field 是什么呢? field 是一个类, 位于java.lang.reflec ...
- bootstrapValidator JS修改内容无法验证
需求: form表单输入中有坐标,坐标可以输入也可以从地图中获取,验证插件使用的是 bootstrapValidator 问题: 当输入错误的值时会触发验证,有错误提示.当在地图上选择坐标,通过js修 ...
- mongodb学习(三)——函数使用的小技巧
$group 下 $sum 函数 Returns a sum of numerical values. Ignores non-numeric values 只能对数字求和,非数字没有作用 查询一段时 ...
- Django3.0.2学习踩坑记
配置文件settings.py相关: 新增app INSTALLED_APPS = [ 'polls.apps.PollsConfig', # 这个是新增的APP 'django.contrib.ad ...
- git 控制版本
git:版本控制工具 1.进入想要进行版本控制项目的文件夹内 2.右击->Git Bash Here 3.初始化 git init 会多出一个.git隐藏文件夹 4.查看文件状体 git sta ...
- Qt Installer Framework翻译(3-2)
添加组件 如果用户在初始安装期间未选择所有可安装组件,则后续也可以使用包管理器从仓库中获取剩余组件进行安装.包管理器是维护工具的一部分,该维护工具在初始安装过程中与应用程序一起被安装.仅当包含组件的仓 ...
- 异数OS 2017 DPDK 峰会观后感
1.DPDK in Container 使用虚拟网卡设备技术为每一个容器分配一个IP 网卡适配器(queue).容器技术可以解决虚拟机技术中虚拟机过于臃肿,难于热迁移的问题,可能可以代替美团OVS方案 ...
- Nmap使用教程(进阶篇)
什么是防火墙? 防火墙是用来控制网络访问的软件或硬件.分为以下两类:1.基于主机的防火墙:2.基于网络的防火墙. 基于主机的防火墙 这是在单台主机上运行的软件,用来控制入站流量(从网络向主机)和出站流 ...