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选中多选框、选中按钮或者单击列表产生该事件

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

事件类型对应的监听器监听器接口中的抽象方法
ActionActionListeneractionPerformed(ActionEvent e)
MouseMouseListenermouseClicked(MouseEvent e)、mouseEntered(MouseEvent e)、mouseExited(MouseEvent e)、mousePressed(MouseEvent e)、mouseReleased(MouseEvent e)
MouseMotionMouseMotionListenermouseDragged(MouseEvent e)、mouseMoved(MouseEvent e)
ItemItemListeneritemStateChanged(ItemEvent e)
KeyKeyListenerkeyPressed(KeyEvent e)、keyReleased(KeyEvent e)、keyTyped(KeyEvent e)
FocusFocusListenerfocusGained(FocusEvent e)、focusLost(FocusEvent e)
WindowWindowListenerwindowActivated(WindowEvent e)、windowClosed(WindowEvent e)、windowClosing(WindowEvent e)、windowDeactivated(WindowEvent e)、windowDeiconified(WindowEvent e)、windowIconified(WindowEvent e)、windowOpened(WindowEvent e)
ComponentComponentListenercomponentHidden(ComponentEvent e)、componentMoved(ComponentEvent e)、componentResized(ComponentEvent e)、componentShown(ComponentEvent e)
TextTextListenertextValueChanged(TextEvent e)

事件适配器

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

适配器说明
MouseAdapter鼠标事件适配器
WindowAdapter窗口事件适配器
KeyAdapter键盘事件适配器
FocusAdapter焦点适配器
MouseMotionAdapter鼠标移动事件适配器
ComponentAdapter组件源适配器
ContainerAdapter容器源事件适配器
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值