java事件处理

一、Java的事件处理机制

二、事件处理流程

1、给事件源对象注册监听者

    事件监听者是在事件发生时要对事件进行处理的对象。AWT定义了各种类型的事件,每一种事件有相应的事件监听者接口 ,在接口中描述了处理相应事件应该实现的基本行为。若事件类名为XxxEvent,则事件监听接口的命名为XxxListener,给部件注册监听者的方法为addXxxListener(XxxListener a)。
    列子:只要用户点击按钮,JButton对象就会创建一个ActionEvent对象,然后调用listener.actionPerformed(event)传递事件对象。

内嵌类的方法: 
MyListener listener = new MyListener();
JButton button = new JButton("OK");
button.addActionListener(listener);
class MyListener implements ActionListener{
    ...
    public void actionPerformed(ActionEvent event){
        ...
    }
}
lambda 表达式: 
exitButton.addActionListener(event -> Systeu.exit(O));
使用匿名类: 
exitButton.addActionListener(new ActionListener() 
{
     public void actionPerformed(new ActionEvent) 
     { 
        System.exit(0); 
     } 
}); 

2、给监听者编写事件处理代码

3、发生事件时调用监听者的方法进行相关处理
    java的事件处理机制称为委托事件处理,事件源发生事件时由监听者处理。监听者中定义事件处理方法,事件源不需要实现任何接口,但其内部有个列表记录该事件源注册了哪些监听者,从而保证发生事件时能去调用监听者的方法。

三、适配器类adapter:

鉴于简化的目的,每个含有 多个方法的 AWT 监听器接口都配有一个适配器(XxxAdapter) 类,这个类实现了接口中的所有方 法, 但每个方法没有做任何事情。可以通过继承适配器类来指定对某些事件的响应动作,而不必实现接口中的每 个方法(ActionListener 这样的接口只有一个方法,因此没必要提供适配器类)。

内部类方法:
class Terminator extends WindowAdapter 
{ 
    public void windowCIosing(WindowEvent e) 
    { 
          if {useragrees) System.exit(O); 
    } 
}
frame.addWindowListener(new Terminator()); 
匿名内部类方法:
frame.addWindowListener(new WindowAdapter()
{ 
   public void windowClosing(WindowEvent e) 
   { 
     if (useragrees) System.exit(0); 
   }
}); 

四、动作

    通常, 激活一个命令可以有多种方式。用户可以通过菜单、击键或工具栏上的按钮选择 特定的功能。在 AWT 事件模型中实现这些非常容易:将所有事件连接到同一个监听器上。
    Swing包提供了一种非常实用的机制来封装命令,并将它们连接到多个事件源,这就是 Action 接口。
    有一个类实现了这个接口除 actionPerformed 方法之外的所有方 法,它就是 AbstractAction。这个类存储了所有名 / 值对, 并管理着属性变更监听器。我们可 以直接扩展 AbstractAction 类,并在扩展类中实现 actionPerformed方法。

五、AWT事件继承层次

AWT事件类的继承关系图

事件处理总结:

   AWT将事件分为底层low-level)事件和语义semantic)事件。语义事件是表示用户动作的事件,底层事件是形成那些事件的事件。
 下面是 java.awt.event 包中最常用的语义事件类:
  •ActionEvent (对应按钮点击、 菜单选择、选择列表项或在文本框中 ENTER);  
  •AdjustmentEvent (用户调节滚动条);
  •ItemEvem (用户从复选框或列表框中选择一项)。
常用的 5 个底层事件类是:
  •KeyEvent (一个键被按下或释放);
  •MouseEvent (鼠标键被按下、 释放、 移动或拖动);
  •MouseWheelEvent (鼠标滚轮被转动);
  •FocusEvent (某个组件获得焦点或失去焦点);
  •WindowEvent ( 窗口状态被改变)

所有的Listener接口都继承于EventListener,位于java.util包中。

AWT事件接口及处理方法(java.awt.event包)
接口 方法 参数 / 访问方法 事件源 描述信息
ActionListener actionPerformed  ActionEvent
• getActionCommand
• getModifiers
AbstractButton
JComboBox
JTextField
Timer
单击按钮、单击菜单项
文本框内按回车等动作
AdjustmentListener adjustmentValueChanged AdjustmentEvent
•getAdjustable
•getAdjustmentType
•getValue
JScrollbar 移动了滚动条等组件
ItemListener itemStateChanged ItemEvent
•getltem
•getltemSelectable
•getStateChange
AbstractButton
JComboBox
选择了可选项的内容
FocusListener focusGained
focusLost
FocusEvent
•isTemporary
Component 组件得到或失去焦点
KeyListener keyPressed
keyReleased
keyTyped
KeyEvent
•getKeyChar
•getKeyCode
•getKeyModifiersText
•getKeyText
•isActionKey
Component 键盘输入
MouseListener

mousePressed

mouseReleased

mouseEntered

mouseExited

mouseClicked

MouseEvent

•getClickCount

•getX

•getY

•getPoint

•translatePoint

Component 鼠标点击等
MouseMotionListener

mouseDragged

mouseMoved

MouseEvent Component 鼠标移动
MouseWheelListener mouseWheelMoved

MouseWheelEvent

•getWheelRotation

•getScrollAmount

Component 鼠标滚轮被转动
WindowListener

windowClosing

windowOpened

windowlconified

windowDeiconified

windowClosed

windowActivated

windowDeactivated

WindowEvent

•getWindow

Window 窗口事件
WindowFocusListener

windowGainedFocus

windowLostFocus

WindowEvent

•getOppositeWindow

Window 窗体得到或失去焦点
WindowStateListener windowStateChanged

WindowEvent

•getOldState

•getNewState

Window 窗体状态

猜你喜欢

转载自blog.csdn.net/qq_29837161/article/details/80764332