实现步骤
?根据需要定义相应类型的监听者类,在类的 定义中完成事件的处理(建议使用inner class 定义);
?创建事件监听者对象;
?为将会触发事件的组件C注册相应的事件监听 者对象(使用C的addXXXListener()方法)。 ?例:ButtonAct.java
事件与监听者类型
?XXXListener接口与XXXEvent
–XXX 为特定类型 – 常用类型:
Action, Focus, Key, Window,
MouseEvent vs. Mouse/MouseMotionListener
?注册与取消:组件包含的新方法
addXXXListener()与removeXXXListener()
监听者接口中有什么?
?每种Listener接口均定义了一套abstract方法, 编程者必须在监听者类中实现这些方法来做事 件处理; ?例:
ActionListener: actionPerformed()
WindowListener: windowOpened/Closing/Closed/Activated/ Deactivated/Iconified/Deiconified()
使用Listener Adapter
?由于接口中的方法为abstract方法,所以在监听者类中要实现所有的方法,较为烦琐。 ?为了简化编程,引入了Adapter。具有两个以上方法的监听者接口均对应一个XXXAdapter类,提供了接口中每个方法的缺省实现。
使用Listener Adapter(续) ?例:
class MyWindowListener extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } }
?例:DoubleClick.java(相应鼠标事件)
事件处理有关问题
?有哪些事件类 (java.awt.event) ? ?每个事件类的监听者接口? ?每个监听者接口规定的方法?
?多方法的监听者接口的适配器(实现接口的抽象类)是什么? ?组件的事件委托(注册)方法?
事件类-- ActionEvent类
?ActionEvent类:属于动作事件,包括:点击按钮;双击一个列表中的选项;选择菜单项;在文本框中按回车。最典型的例子是:鼠标点击按钮所产生的事件,经ActionListener接口触发一连串动作,再由actionPerformed()方法完成这些动作。
–e.getSource() 返回事件发生的对象( 名) –e.getActionCommand() 返回按扭名( 动作事
件的命令字符串) 。 ?ActionListener 接口
–public void actionPerformed(ActionEvent e) 监听者类
?某个类可以兼职也可以专职做这件事(实现监听者接口)。 ?一个类若实现一个接口,必须实现接口的全部方法。 例如:ActionListener接口只有一个方法:
void actionPerformed(ActionEvent e) ?实现接口的类可以是: –一般类 –内部类 –匿名类 窗口事件
?关闭窗口框时引发 WindowEvent事件 ?委托 addWindowListener(new Wclose()); ?定义监听者类
class Wclose implements WindowListener { public void windowClosing(WindowEvent e) { System.exit(0); }
?WindowListener类有7 个方法,必须都实现
?WindowAdapter 接收窗口事件的抽象适配器类,用空内容实现了WindowListener接口的所有方法
?class Wclose extends WindowAdapter {…} WindowEvent事件 ?引发原因:
–有关窗口操作引发的事件
?事件监听接口WindowListener ?接口方法
–windowActivated(WindowEvent e) 激活窗口
–windowClosed(WindowEvent e) 调用dispose方法关闭窗口后 –windowClosing(WindowEvent e)
窗口正在被关闭(试图利用窗口关闭按钮关闭窗口) –windowDeactivated(WindowEvent e) 本窗口成为非活动窗口 WindowEvent事件(续)
–windowDeiconified(WindowEvent e)
窗口从最小化恢复为普通窗口 –windowIconified(WindowEvent e) 窗口变为最小化图标
–windowOpened(WindowEvent e) 窗口被打开成为可见时 ?接口适配器 WindowAdapter ?注册事件方法 –addWindowListener TextEvent文本事件
?引发原因:
–文本框或文本区域内容改变 ? 事件监听接口:TextListener ? 接口方法:
–textValueChanged(TextEvent e) ? 组件注册该事件方法: –addTextListener( 监听者)
ItemEvent选择事件
?引发原因:
–改变列表框中的选中项 –改变复选框选中状态 –改变下拉选单的选中项
? 事件监听接口:ItemListener ? 接口方法:
–itemStateChanged(ItemEvent e) ? 组件注册该事件方法: –addItemListener( 监听者)
AdjustmentEvent调整事件
?引发原因:
–操作滚动条改变滑块位置
? 事件监听接口:AdjustmentListener ? 接口方法:
–adjustmentValueChanged(AdjustmentEvent e) ? 组件注册该事件方法:
–addAdjustmentListener( 监听者)
KeyEvent事件 ?引发原因:
–敲完键(KEY-TYPED) –按下键 (KEY-PRESSED) –释放键 (KEY-RELEASE) ?事件监听接口:KeyListener
?接口方法:
–keyPressed(KeyEvent e) 键已被按下时调用 –keyReleased(KeyEvent e) 键已被释放时调用 –keyTyped(KeyEvent e) 键已被敲完时调用 ?KeyEvent方法:char ch = e.getKeyChar(); ?事件监听适配器(抽象类)KeyAdapter ?组件注册该事件方法: –addKeyListener(监听者) MouseEvent事件
?引发原因: (鼠标作用在一个组件上)
–鼠标事件: 鼠标键按下,鼠标键抬起,单击鼠标 , 鼠标光标进入一个组件,鼠标光标离开一个组件。 –鼠标移动事件: 鼠标移动,鼠标拖动 ?鼠标事件监听接口1:
–MouseListener 接受鼠标事件 ?该接口方法:
–mouseClicked(MouseEvent e)
–mouseEntered(MouseEvent e) 鼠标光标进入一个组件 –mouseExited(MouseEvent e) 鼠标光标离开一个组件 MouseEvent事件(续)
?鼠标事件监听适配器(抽象类)MouseAdapter ?鼠标事件监听接口:
–MouseMotionListener 接受鼠标移动事件 ?该接口方法:
–mouseMoved(MouseEvent e) 鼠标光标在组件上移动 –mouseDragged(MouseEvent e) 用鼠标拖动一个组件 ?鼠标移动事件监听适配器 MouseMotionAdapter ?组件注册鼠标事件方法: –addMouseListener(监听者) ?组件注册鼠标移动事件方法:
–addMouseMotionListener(监听者) MouseEvent事件(续) ?MouseEvent方法
–e.getClickCount() =1 单击 =2 双击 –Point e.getPoint() 取鼠标光标位置 –int e.getX() int e.getY() 取鼠标光标位置 –e.getModifiers() = e.BUTTON1_MASK 鼠标左键
= e.BUTTON3_MASK 鼠标右键
FocusEvent事件 ?引发原因: –组件获得焦点 –组件失去焦点
?事件监听接口 FocusListener ?接口方法:
–focusGained(FocusEvent e) 组件获得焦点时调用
–focusLost(FocusEvent e) 组件失去焦点时调用
?接口适配器:FocusAdapter
?组件注册该事件方法:addFocusListener ComponentEvent 事件 ?引发原因:
–当组件移动、改变大小、改变可见性时引发 ?事件监听接口:ComponentListener ?接口方法:
–componentHidden(ComponentEvent e) 组件隐藏 –componentMoved(ComponentEvent e) 组件移动 –componentResized(ComponentEvent e) 组件改变大小 –componentShown(ComponentEvent e) 组件变为可见 ?接口适配器 ComponentAdapter ?组件注册该事件方法: –addComponentListener
ContainerEvent 事件 ?引发原因:
–当容器内增加或移走组件时引发 ?事件监听接口:ContainerListener ?接口方法
–componentAdded(ContainerEvent e) 容器内加入组件 –componentRemoved(ContainerEvent e) 从容器中移走
?接口适配器 ContainerAdapter ?容器注册该事件方法: –addContainerListener GUI标准组件 ?Label(标签) – 构造方法
Label myl = new Label(“标签内容”); Label a = new Label(“information”);
Label a = new Label(“information”, Label.CENTER); – 方法
a.setText(“ 新内容”); 设置标签内容 String a.getText() 读取标签内容?Button(按钮)
–Button myB1 = new Button();
–Button myB2 = new Button(“Cancel”); GUI标准组件
?Checkbox(检测盒,可作为复选框使用) –创建时指定检测盒的标签
Checkbox cb1 = new Checkbox ();
Checkbox cb2 = new Checkbox (“registered”);
Checkbox cb3 = new Checkbox (“registered”, true);
Checkbox cb4 = new Checkbox (“registered”, true, group); –获取和设置检测盒的状态
组件