Java AWT入门教程学习3



Java AWT入门教程学习3 。

10.3.2   事件

我们可以将事件进行分类。

1.按产生事件的物理操作和GUI组件的表现效果进行分类(见图10-11)

AWT学习3 - 梦幻凡冰 - 永恒的爱

图10-11   事件分类

2.按事件的性质分类

java.util.EventObject类是所有事件对象的基础父类,所有事件都是由它派生出来的。AWT的相关事件继承于java.awt.AWTEvent类,这些AWT事件分为两大类:低级事件和高级事件。

(1)低级事件

低级事件是指基于组件和容器的事件,当一个组件上发生事件,如鼠标的进入、点击、拖放等,或组件的窗口开关等时,触发了组件事件。

—   ComponentEvent(组件事件:组件尺寸的变化、移动);

—   ContainerEvent(容器事件:组件增加、移动);

—   WindowEvent(窗口事件:关闭窗口、窗口闭合、图标化);

—   FocusEvent(焦点事件:焦点的获得和丢失);

—   KeyEvent(键盘事件:键按下、释放);

—   MouseEvent(鼠标事件:鼠标单击、移动)。

(2)高级事件(语义事件)

高级事件是基于语义的事件,它可以不和特定的动作相关联,而依赖于触发此事件的类。比如,在TextField中按Enter键会触发ActionEvent事件,滑动滚动条会触发AdjustmentEvent事件,选中项目列表的某一条就会触发ItemEvent事件。

—   ActionEvent(动作事件:按钮按下,TextField中按Enter键);

—   AdjustmentEvent(调节事件:在滚动条上移动滑块以调节数值);

—   ItemEvent(项目事件:选择项目,不选择“项目改变”);

—   TextEvent(文本事件:文本对象改变)。

10.3.3   事件处理器(监听器)

1.事件处理器基本概念

一个事件监听器对象负责处理一类事件。一类事件的每一种发生情况,分别由事件监听器对象中的一个方法来具体处理。在事件源和事件监听器对象中进行约定的接口类,被称为事件监听器接口。事件监听器接口类的名称与事件类的名称相对应,例如,MouseEvent事件类的监听器接口名为MouseListener。

每类事件都有对应的事件监听器,监听器是接口,根据动作来定义方法。例如,与键盘事件KeyEvent相对应的接口是:

public interface KeyListener extends EventListener {

public void keyPressed(KeyEvent ev);

public void keyReleased(KeyEvent ev);

public void keyTyped(KeyEvent ev);

}

注意到在本接口中有3个方法,那么Java运行时系统什么时候调用哪个方法呢?其实根据这3个方法的方法名就能够知道应该是什么时候调用哪个方法执行了。当键盘键刚按下去时,将调用keyPressed()方法执行;当键盘键抬起来时,将调用keyReleased()方法执行;当键盘键敲击一次时,将调用keyTyped()方法执行。

又例如,窗口事件接口:

public interface WindowListener extends EventListener{

public void windowClosing(WindowEvent e);

//把退出窗口的语句写在本方法中

public void windowOpened(WindowEvent e);

//窗口打开时调用

public void windowIconified(WindowEvent e);

//窗口图标化时调用

public void windowDeiconified(WindowEvent e);

//窗口非图标化时调用

public void windowClosed(WindowEvent e);

//窗口关闭时调用

public void windowActivated(WindowEvent e);

//窗口激活时调用

public void windowDeactivated(WindowEvent e);

//窗口非激活时调用

}

AWT的组件类中提供注册和注销监听器的方法。

(1)注册监听器

public void addXXXListener( );

(2)注销监听器

public void remove XXXListener( );

例如,Button类:

public class Button extends Component {

……

public synchronized void addActionListener(ActionListener l);

public synchronized void removeActionListener(ActionListener l);

}

总结一下,组件、监听器接口和方法的对应关系如表10-1所示。

表10-1   组件、监听器接口和方法的对应关系

类别(Category)

接口(Interface)

方法(Methods)

Action

ActionListener

actionPerformed(ActionEvent)

Item

ItemListener

itemStateChanged(ItemEvent)

Mouse motion

MouseMotionListener

mouseDragged(MouseEvent)

mouseMoved(MouseEvent)

Mouse button

MouseListener

mousePressed(MouseEvent)

mouseReleased(MouseEvent)


mouseEntered(MouseEvent)

mouseExited(MouseEvent)

mouseClicked(MouseEvent)

Key

KeyListener

keyPressed(KeyEvent)

keyReleased(KeyEvent)

keyTyped(KeyEvent)

Focus

FocusListener

focusGained(FocusEvent)

focusLost(FocusEvent)

Adjustment

AdjustmentListener

adjustmentValueChanged(AdjustmentEvent)

Componert

ComponentListener

ComponentMoved(ComponentEvent)

ComponentHidden(ComponentEvent)

ComponentResized(ComponentEvent)

ComponentShown(ComponentEvent)

Window

WindowListener

windowClosing(WindowEvent)

windowOpened(WindowEvent)

windowIconified(WindowEvent)

windowDeiconified(WindowEvent)

windowClosed(WindowEvent)

windowActivated(WindowEvent)

windowDeactivated(WindowEvent)

Container

ContainerListener

componentAdded(ContainerEvent)

componentRmoved(ContainerEvent)

Text

TextListener

textValueChanged(TextEvent)

我们看一个实例,它实现关闭窗口的事件处理,用不同层次的事件类型来表示同一个事件源对象。

import java.awt.*;

public class TestFrame{

public static void main(String[] args){

Frame f = new Frame(“sports.sina.com.cn”);

f.add(new Button(“ok”));

f.setSize(300,300);

f.setVisible(true);

f.addWindowListener(new MyWindowListener());   //注册监听器

try{

Thread.sleep(5000);

}catch(Exception e){

}

//f.setVisible(false);   //隐藏窗口

f.dispose();   //清除窗口

}

}

//MyWindowListener.java   //事件监听器类 (有7个方法)

import java.awt.event.WindowListener;

import java.awt.event.WindowEvent;

import java.awt.Window;

public class MyWindowListener implement WindowListener {

public void windowOpened(WindowEvent parm1){

}

public void windowClosing(WindowEvent parm1){   //Closing正想关闭窗口

parm1.getWindow().setVisible(false);

//parm1.getSource()   //getSource方法返回发生事件的来源

((Window)parm1.getComponent()).dispose();

//getComponent()方法返回发生事件的组件

System.exit(0);   //退出程序

}

public void windowClosed(WindowEvent parm1){   //Closed已经关闭窗口

}

public void windowIconified(WindowEvent parm1){

}

public void windowDeiconified(WindowEvent parm1){

}

public void windowActivated(WindowEvent parm1){

}

public void windowDeactivated(WindowEvent parm1){

}

}