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请求打交道,很多时候我们都希望能够直观的的看到我们发送的请求参数和服务器返回的响应信息,这个时候就需要借助于某些工具啦.本文将采 ...
随机推荐
- SpringBoot 2.x 开发案例之 Shiro 整合 Redis
前言 前段时间做了一个图床的小项目,安全框架使用的是Shiro.为了使用户7x24小时访问,决定把项目由单机升级为集群部署架构.但是安全框架shiro只有单机存储的SessionDao,尽管Shrio ...
- 2019版Idea如何激活
1.下载jar包 链接: https://pan.baidu.com/s/1w4B4_hmiiueNDJMjYKaFyQ 提取码: fkpx 2.修改·vmoptions 1.Help" - ...
- js复制变量值
来源:JavaScript高级程序设计(第3版)69页. 例如 : var a=1; var b = a ; 这里就是把a的值复制给变量 b 了. 但是 复制的变量值 分为 ...
- NTT - 牛客
链接:https://www.nowcoder.com/acm/contest/133/D来源:牛客网 题目描述 Applese打开了m个QQ群,向群友们发出了组队的邀请.作为网红选手,Applese ...
- 矩形内的递推dp
链接:https://www.nowcoder.com/acm/contest/130/B来源:牛客网 黑妹和黑弟又聚在一起玩游戏了,这次他们选择在一个n*m的棋盘上玩游戏,棋盘上的每个方格都有一个非 ...
- 手写vue中v-bind:style效果的自定义指令
自定义指令 什么是自定义指令 以 v- 为前缀,然后加上自己定义好的名字组成的一个指令就是自定义指令.为什么要有自定义指令呢?在有些时候,你仍然需要对普通的DOM元素进行底层的操作,这个时候就可以用到 ...
- (转)GET来的漏洞
转自呆子不开口在wooyun知识库的文章 0x00 前言 这篇文章主要讲目前互联网上get方法被不规范使用带来的一些安全漏洞.其中重点会讲get请求在账号登陆体系中被滥用的场景和攻击方式. 0x01 ...
- python类型-序列
注:本文档主要是学习<Python核心编程(第二版)>时做的资料整理. 1.序列 序列的成员是有序排列的,并且可以通过下标偏移量访问到它的一个或者几个成员,包括字符串(普通字符串和Unic ...
- latex2e
classs and packages 这一节介绍新的latex文档结构, 以及新的文件类型: classs and packages 类和包是什么? lext 2.09和latex2e的主要差别就在 ...
- Dynamics CRM 快速获取custom entity
我们可以使用Command来实现快速获取custom entity的值. 创建cmd 并且在nuget中引用 CRMSDK 复制下面的代码. userName 为登陆CRM的email passwo ...