在此列举四种方法:

  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. DM7的SQL批量插入for、while方法

    示例1,for用法: begin for i in 1...10000 loop insert into test values(i,i,'aaa',sysdate); if i mod 20 = 0 ...

  2. 06_URL参数截取

    1:如何获取URL传给子页面的参数: //获得参数(只对字母数字等有效,参数值为中文则不能传) function getQueryString(name) { var reg = new RegExp ...

  3. Python for Data Analysis 学习心得(一) - numpy介绍

    一.简介 Python for Data Analysis这本书的特点是将numpy和pandas这两个工具介绍的很详细,这两个工具是使用Python做数据分析非常重要的一环,numpy主要是做矩阵的 ...

  4. 2019 年百度之星 初赛一 1002 Game

    传送门 Problem Description 度度熊在玩一个好玩的游戏.游戏的主人公站在一根数轴上,他可以在数轴上任意移动,对于每次移动,他可以选择往左或往右走一格或两格.现在他要依次完成 n 个任 ...

  5. POJ 1458 Common Subsequence (动态规划)

    题目传送门 POJ 1458 Description A subsequence of a given sequence is the given sequence with some element ...

  6. P1850 换教室 期望dp

    P1850 换教室 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n2n 节课程安排在 nn 个时间段上.在第 ii(1 \leq ...

  7. 解决a标签点击会出现虚框现象

    1.解决a标签点击会出现虚框现象. 当a标签获得焦点的时候,a标签的周围就会出现虚框,它不同于border,不占任何宽度,a失去焦点的时候就会消失,就是outline. 在遨游,Firefox ,IE ...

  8. 计算机基础——常用的Dos命令

    d:——切换指定硬盘分区 cd——切换目录,例如:cd D:\下载(使用此命令之前先使用 d: 命令) netstat -ano——查看所有端口号 netstat -a——查看开启了哪些端口 nets ...

  9. python self用法

    在定义类的过程中,无论是显式的创建类的构造方法,还是向类中添加实例方法,都要将self参数作为方法的第一个参数. class Person: def __init__(self): print(&qu ...

  10. 【javaWeb】HttpServletRequest常用获取URL的方法

    1.request.getRequestURL() 返回的是完整的url,包括Http协议,端口号,servlet名字和映射路径,但它不包含请求参数. 2.request.getRequestURI( ...