在此列举四种方法:

  1. 自身类实现ActionListener接口,作为事件监听器

  2. 通过匿名类处理

  3. 通过内部类处理

  4. 通过外部类处理

下面依次介绍:

第一种:自身类实现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中的四种监听类用法的更多相关文章

  1. 关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用

    http://blog.csdn.net/5iasp/article/details/37054171 文章标题:关于JAVA中事件分发和监听机制实现的代码实例 文章地址: http://blog.c ...

  2. JAVA基础学习之throws和throw的区别、Java中的四种权限、多线程的使用等(2)

    1.throws和throw的区别 throws使用在函数外,是编译时的异常,throw使用在函数内,是运行时的异常 使用方法 public int method(int[] arr) throws ...

  3. JAVA中的四种引用以及ReferenceQueue和WeakHashMap的使用示例

    简介: 本文主要介绍JAVA中的四种引用: StrongReference(强引用).SoftReferenc(软引用).WeakReferenc(弱引用).PhantomReference(虚引用) ...

  4. Java中的四种引用

    引用定义 实际上,Java中存在四种引用,它们由强到弱依次是:强引用.软引用.弱引用.虚引用.下面我们简单介绍下这四种引用: 强引用(Strong Reference):通常我们通过new来创建一个新 ...

  5. JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

  6. Java 中的四种引用

    1.强引用(Strong Reference)在 Java 中四种引用中是“最强”的,我们平时通过 new 关键字创建的对象都属于强引用,如下面的代码: Person person = new Per ...

  7. Java 中的四种引用及垃圾回收策略

    Java 中有四种引用:强引用.软引用.弱引用.虚引用: 其主要区别在于垃圾回收时是否进行回收: 1.强引用 使用最普遍的引用.如果一个对象具有强引用,那就 类似于必不可少的生活用品,垃圾回收器绝不会 ...

  8. Java中的四种内部类

    Java中有四种内部类: 成员内部类:定义在另一个类(外部类)的内部,而且与成员属性和方法平级,故称成员内部类.类比于外部类的非静态方法,如果用static修饰就变成了静态内部类 静态内部类:使用st ...

  9. 简述Java中Http/Https请求监听方法

    一.工欲善其事必先利其器 做Web开发的人总免不了与Http/Https请求打交道,很多时候我们都希望能够直观的的看到我们发送的请求参数和服务器返回的响应信息,这个时候就需要借助于某些工具啦.本文将采 ...

随机推荐

  1. win10下使用mklink命令给C盘软件搬家

    在windows下,大多数软件会默认安装在C盘,即使小心翼翼地点开“自定义”->“安装路径”,然后把软件安装到其他盘,还是会有很多软件用到的数据文件被塞到C盘,虽然可以到注册表修改软件默认安装路 ...

  2. 天梯 L2 链表去重

    L2-002 链表去重 (25 分) 给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉.即对每个键值 K,只有第一个绝对值等于 K 的结点被保留.同时,所有被删除的结点须被保存在另一 ...

  3. Match3 Module For Game(THDN)

    介绍    THDN的核心机制为Match3的利用,本文对Match3 Gameplay进行记录,并对其进行改良.THDN作为RogueLIke性质的游戏,玩家在随机生成的dungeon里进行探索并获 ...

  4. Promise里的代码为什么比setTimeout先执行

    当浏览器或者Node拿到一段代码时首先做的就是传递给JavaScript引擎,并且要求它去执行. 然而,执行 JavaScript 并非一锤子买卖,宿主环境当遇到一些事件时,会继续把一段代码传递给 J ...

  5. i3s 一种开源的三维地理数据规范 简单解读

    i3s,esri主推到ogc的一种三维开源GIS数据标准. 版权声明:原创.博客园/B站/小专栏/知乎/CSDN @秋意正寒 转载请标注原地址并声明转载: https://www.cnblogs.co ...

  6. webpack进阶用法你都get到了么?

    如何消除无用代码:打包自己的私有js库:实现代码分割和动态import提升初次加载速度:配置eslint规范团队代码规范:打包异常抓捕你都get到了么? 摇树优化:Tree Shaking webpa ...

  7. python 进程Queue

    1.作用:进程之间的数据交互 2.常用方法 """ 对象.put() 作用:放入队列一个数据 对象.get() 作用:取队列一个数据,若队列没有值,则阻塞 对象.empt ...

  8. 从零开始ming的多人联机游戏(3)为socket通讯添加mysql数据库

    macOS下visual studio C#加载mySql 本文在上一节的基础上,添加了mysql数据库的功能.client发送信息给服务器后,服务器将收到的消息保存在数据库中. 如果client发送 ...

  9. Python中随机数的生成

    在Python中要实现随机数的生成,需要使用random模块中randint方法. 其具体实现方法如下: import random a = random.randint(1,20) #(1,20)为 ...

  10. 移除sitemap中的entity

    下面截图是sitemap所在的位置 如果遇到什么原因,当前使用的entity被弃用需要删除,必须要把当前site map 引用的entity也一并删除. 不然会导致site map不能正常加载