JAVA图形界面(GUI)之事件处理机制

简介:

之前几篇博客中,我们编写了一些示例,但是这些示例并不能与读者进行交互,读者之所以对图形界面感兴趣,就是因为图形界面与读者交互能力强。但是单纯的界面是没有使用价值的,要是图形界面能与读者交流,那么必须了解java的事件处理机制。
首先组件要先注册事件处理器,当读者单击组件、移动鼠标或者敲击键盘都会产生事件(Event)。一旦有事件产生,应用程序做出对该事件的响应,这些组件就是事件源(Event Source)。接受、解析和处理事件,实现和读者交互的方法称之为事件处理器(Event Handler)。他们之间的工作关系如图:

Created with Raphaël 2.1.0外部作用事件源已注册事件处理器

事件源可以产生多种不同类型的事件,可以注册多种不同类型的事件监听器。当组件上发生某种事件,生成相应的事件对象,该对象中封装了有关该事件的各种信息。该对象被传递到相应的注册的事件处理器,这时事件的处理方法才执行。

事件监听器

事件监听器是类库中的一组接口,每种事件类都有一个负责监听这种事件对象的接口。接口中定义了处理该事件的抽象方法。
接口只是一个抽象定义,要想使用必须实现它。所以每次对事件进行处理是调用对应接口的实现类中的方法。当事件源产生事件并生成事件对象,该对象被送到事件处理器中,处理器调用接口实现类对象中的相应方法来处理该事件。
要想启动相应的事件监听器必须在程序中注册它。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

/**
 * 事件监听器示例
 * 
 * @author jianggujin
 *
 */
public class EventDemo extends JFrame
{
   public EventDemo()
   {
      super("EventDemo");
      JButton btn1 = new JButton("按钮1");
      // 注册监听器
      btn1.addActionListener(new ButtonClick());
      add(btn1);
      setSize(300, 300);
      setLocationRelativeTo(null);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      setVisible(true);
   }

   public static void main(String[] args)
   {
      new EventDemo();
   }
}

/**
 * 实现动作监听器
 * 
 * @author jianggujin
 *
 */
class ButtonClick implements ActionListener
{

   @Override
   public void actionPerformed(ActionEvent e)
   {
      // 获得事件源
      Object obj = e.getSource();
      // 判断是否为按钮
      if (obj instanceof JButton)
      {
         JButton srcBtn = (JButton) obj;
         System.out.println("您单击了按钮:" + srcBtn.getText());
      }
      else
      {
         System.out.println("未知事件源");
      }
   }
}

当单击按钮时,将生成事件对象,对象中包含了事件源(按钮)的信息传送到已注册的事件监听器,监听器调用相应方法并将该对象传入。

事件的种类

JAVA处理事件响应的类和监听接口大多位于AWT包中。在java.swing.event包中有专门用于Swing组件的事件类和监听接口。
AWT事件类继承自AWTEvent,他们的超类是EventObject。在AWT事件中,事件分为低级事件和语义事件。语义事件是对某些低级事件的一种抽象概括,是单个或多个低级事件的某些特例的集合。
常用低级事件有:

事件 说明
KeyEvent 按键按下和释放产生该事件
MouseEvent 鼠标按下、释放、拖动、移动产生该事件
FocusEvent 组件失去焦点产生该事件
WindowEvent 窗口发生变化产生该事件

常用语义事件有:

事件 说明
ActionEvent 当单击按钮、选中菜单或在文本框中回车等产生该事件
ItemEvent 选中多选框、选中按钮或者单击列表产生该事件

常用事件和事件监听器如下:

事件类型 对应的监听器 监听器接口中的抽象方法
Action ActionListener actionPerformed(ActionEvent e)
Mouse MouseListener mouseClicked(MouseEvent e)、mouseEntered(MouseEvent e)、mouseExited(MouseEvent e)、mousePressed(MouseEvent e)、mouseReleased(MouseEvent e)
MouseMotion MouseMotionListener mouseDragged(MouseEvent e)、mouseMoved(MouseEvent e)
Item ItemListener itemStateChanged(ItemEvent e)
Key KeyListener keyPressed(KeyEvent e)、keyReleased(KeyEvent e)、keyTyped(KeyEvent e)
Focus FocusListener focusGained(FocusEvent e)、focusLost(FocusEvent e)
Window WindowListener windowActivated(WindowEvent e)、windowClosed(WindowEvent e)、windowClosing(WindowEvent e)、windowDeactivated(WindowEvent e)、windowDeiconified(WindowEvent e)、windowIconified(WindowEvent e)、windowOpened(WindowEvent e)
Component ComponentListener componentHidden(ComponentEvent e)、componentMoved(ComponentEvent e)、componentResized(ComponentEvent e)、componentShown(ComponentEvent e)
Text TextListener textValueChanged(TextEvent e)

事件适配器

事件适配器其实就是一个接口的实现类,实际上适配器类只是将监听接口方法中的方法全部实现成空方法。这样在定义事件监听器时就可以继承该实现类,并重写所需要的方法,不必实现覆盖所有方法了。常用的事件适配器类有如下击中

适配器 说明
MouseAdapter 鼠标事件适配器
WindowAdapter 窗口事件适配器
KeyAdapter 键盘事件适配器
FocusAdapter 焦点适配器
MouseMotionAdapter 鼠标移动事件适配器
ComponentAdapter 组件源适配器
ContainerAdapter 容器源事件适配器
目录
相关文章
|
1月前
|
Java
Java并发编程中的锁机制
【2月更文挑战第22天】 在Java并发编程中,锁机制是一种重要的同步手段,用于保证多个线程在访问共享资源时的安全性。本文将介绍Java锁机制的基本概念、种类以及使用方法,帮助读者深入理解并发编程中的锁机制。
|
1月前
|
Java 程序员
Java中的异常处理机制
【2月更文挑战第22天】在Java编程中,异常处理是一个重要的概念。它允许程序员在程序执行过程中遇到错误时,对错误进行处理,而不是让程序崩溃。本文将介绍Java中的异常处理机制,包括异常的分类、如何捕获和处理异常以及自定义异常等内容。
18 1
|
1月前
|
存储 Java 数据库
|
1月前
|
Java
深入了解Java中的锁机制
深入了解Java中的锁机制
|
30天前
|
开发框架 Java API
java反射机制的原理与简单使用
java反射机制的原理与简单使用
17 1
|
18天前
|
安全 Java 调度
深入理解Java中的线程安全与锁机制
【4月更文挑战第6天】 在并发编程领域,Java语言提供了强大的线程支持和同步机制来确保多线程环境下的数据一致性和线程安全性。本文将深入探讨Java中线程安全的概念、常见的线程安全问题以及如何使用不同的锁机制来解决这些问题。我们将从基本的synchronized关键字开始,到显式锁(如ReentrantLock),再到读写锁(ReadWriteLock)的讨论,并结合实例代码来展示它们在实际开发中的应用。通过本文,读者不仅能够理解线程安全的重要性,还能掌握如何有效地在Java中应用各种锁机制以保障程序的稳定运行。
|
24天前
|
Java 程序员 开发者
深入理解Java异常处理机制
在Java编程中,异常处理是确保程序健壮性与稳定性的重要组成部分。本文旨在深度剖析Java异常处理机制的核心概念、结构及其实际应用策略,帮助开发者更好地理解并运用异常处理来优化程序设计。我们将从Java异常体系结构入手,探讨try-catch-finally语句块的执行流程,分析自定义异常的必要性与实现方式,并通过实例演示如何有效地管理和处理异常情况。
23 3
|
30天前
|
设计模式 XML 存储
java中的反射机制
java中的反射机制
12 1
|
1月前
|
Java
Java处理事件
Java处理事件
13 0
|
1月前
|
Java