《GUI程序设计事件监听》由会员分享,可在线阅读,更多相关《GUI程序设计事件监听(24页珍藏版)》请在金锄头文库上搜索。
1、Java GUI程序设计(二) 事件处理基础 事件处理机制 窗口事件处理 事件类型和相应的接口及其方法 事件适配器 处理事件的方式事件处理 对于GUI程序与用户操作的交互功能,Java使用一种自己 的专门方式,称之为事件处理机制。 事件(Event) 一个对象,它描述了发生什么事情 事件源(Event source) 发生事件的组件 事件处理器:负责处理事件的方法。 事件处理方法(Event handler) 能够接收、解析和处理事 件类对象、实现和用户交互的方法awt中的事件处理方式 委派式事件处理(delegation)-个别的组件将 整个事件处理委托给特定的对象,当该组件发生 指定的事件
2、时,就通知所委托的对象,有这个对 象来处理这个事件。这个受委托处理事件的对象 称为事件倾听对象(event listener) 每个组件均可以针对特定的事件指定一个或多个 事件倾听对象,由这些事件倾听对象负责处理事 件awt事件分 类EventObjectActionEventAdjustmentEventAWTEventItemEventTextEventContainerEventFocusEventInputEventPaintEventWindowEventKeyEventMouseEventComponentEvent事件监听器 Java程序对事件进行处理的方法是放在一个类对 象中,
3、这个类对象就是事件监听器。 我们必须将一个事件监听器对象同某个事件源的 某种事件进行关联,这样,当某个事件源上发生 了某种事件后,关联的事件监听器对象中的代码 才会被执行。 我们把这个过程称为向事件源注册事件监听器对 象。事件监听器 MouseEvent 类对应鼠标事件,包括鼠标按下,鼠标释放 ,鼠标点击等。 WindowEvent 类对应窗口事件,包括用户点击了关闭按 钮,窗口得到与失去焦点,窗口被最小化等。 ActionEvent 类对应一个动作事件。它不是代表一个具体 的动作,而是一种语义,如按钮或菜单被单击,单行文本 框中按下回车键等都可以看做是ActionEvent事件。 如果一个事
4、件监听器类只用在一个组件上注册监听器事件 对象,为了让程序代码更加紧凑,我们可以使用匿名内部 类来产生这个事件监听器。7按钮单击事件示例public class MyEventTest extends Panel Button myButton = new Button(“蓝色“);. . . / 创建面板或其他 GUI 组件 MyListener myAction = new MyListener();MyButton.addActionListener(myAction);private class MyListener implements ActionListener public M
5、yListener() . . . / 初始化 public void actionPerformed(ActionEvent event) . . ./需要为事件进行的操作 实现了ActionListener接 口的监听器实现了actionPerformed方法,以便根据参 数 ActionEvent 对象的信息对事件做出响 应为按钮事件 注册监听器8事件体系结构FocusEventAWTEventActionEventAdjustmentEventComponentEventTextEventItemEventContainerEventInputEventWindowEventPaint
6、EventKeyEventMouseEventEventObject事件处理例子(示例11-8) b.addActionListener(new ButtonListener(); class ButtonListener implements ActionListener public void actionPerformed(ActionEvent e) clickCount+; t.setText(“You click the Click Me Button:“+clickCount+“ Time(s).“); 一个事件多个处理器例子(示例 11-9)b1.addActionListen
7、er(new ButtonListener1(); b2.addActionListener(new ButtonListener2();窗口事件(示例11-10) 当一个窗口被激活、撤销激活、打开、关 闭、最大化、最小化时,发生窗口事件。 从WindowEvent类中创建的对象表示窗口 事件。12AWT 事件类型 2-1事件类说明事件源ActionEvent 通常按下按钮,双击列表项或选 中一个菜单项时,就会生成此事 件。 Button、List、 MenuItem、 TextField AdjustmentEvent 操纵滚动条时会生成此事件。 Scrollbar ComponentEve
8、nt 当一个组件移动、隐藏、调整大 小或成为可见时会生成此事件。Component ItemEvent 单击复选框或列表项时,或者当 一个选择框或一个可选菜单的项 被选择或取消时生成此事件。 Checkbox、 CheckboxMenuItem 、Choice、List FocusEvent 组件获得或失去键盘焦点时会生 成此事件。 Component13AWT 事件类型 2-2事件类说明事件源KeyEvent 接收到键盘输入时会生成此事件 。 Component MouseEvent 拖动、移动、单击、按下或释放 鼠标或在鼠标进入或退出一个组 件时,会生成此事件。 Component Con
9、tainerEvent 将组件添加至容器或从中删除时 会生成此事件。Container TextEvent 在文本区或文本域的文本改变时 会生成此事件 。TextField、 TextArea WindowEvent 当一个窗口激活、关闭、失效、 恢复、最小化、打开或退出时会 生成此事件。 Window 14监听器接口列表 2-1事件监听器 方法 ActionListener actionPerformed AdjustmentListener adjustmentValueChanged ComponentListener componentResized componentMoved co
10、mponentShown componentHidden ContainerListener componentAdded componentRemoved FocusListener focusLost、focusGained ItemListener itemStateChanged 15监听器接口列表 2-2事件监听器 方法 KeyListener keyPressed、keyReleased keyTyped MouseListener mouseClicked、mouseEntered mouseExited、mousePressed mouseReleased MouseMotio
11、nListener mouseDragged、mouseMoved TextListener textChanged WindowListener windowActivated、windowDeactivated windowClosed、windowClosing windowIconified、windowDeiconified windowOpened 事件适配器(Adapter) 为简化编程,针对大多数事件监听器接口 定义了相应的实现类-事件适配器类,在 适配器类中,实现了相应监听器接口中所 有的方法,但不做任何事情。子类只要继 承适配器类,就等于实现了相应的监听器 接口,只重写所需
12、要的方法就可以了。事件处理类和产生事件的类的关 系 利用内部类来处理事件: Button b=new Button(“确定”); b.addActionListener(new AddListener(); class AddListener implements ActionListener public void actionPerformed(ActionEvent e) 事件处理类和产生事件的类的关 系(con.) 用匿名类处理事件: this.addWindowListener(new WindowAdapter() public void windowClosing(WindowE
13、vent e) System.exit(0); ); 事件处理类和产生事件的类的关 系(con.)通过其他类处理事件: public class EventHandler implements ActionListener public class TestEvent Button b=new Button(“Test”); b.addActionListener(new EventHandler(); 事件处理类和产生事件的类的关 系(con.)直接在本类里处理事件: public class Test implements ActionListener Button b=new Butto
14、n(“Cancel”); b.addActionListener(this); public void actionPerformed(ActionEvent e) 事件适配器(Adapter) 一个组件上的一个动作可以产生多种不同类型的 事件,因而可以向同一个事件源上注册多种不同 类型的监听器。 一个事件监听器对象可以注册到多个事件源上, 即多个事件源的同一事件都由一个对象统一来处 理。 一个事件源上也可以注册对同一事件进行处理的 多个事件监听器对象,当这一个事件发生时,各 事件监听器对象依次被调用。22适配器类适配器类 事件监听器接口 ComponentAdapter ComponentL
15、istener ContainerAdapter ContainerListener FocusAdapter FocusListener KeyAdapter KeyListener MouseAdapter MouseListener MouseMotionAdapter MouseMotionListener WindowAdapter WindowListener 为了使事件处理变得简单,Java 为 具有多个方法的监听器接口提供适 配器类。适配器类实现并提供了一 个事件监听器接口中的所有的方法 ,但这些方法都是空方法。 private class MyMouseAdapter ext
16、ends MouseAdapter private Color bgColor;public MyMouseAdapter (Color c) bgColor = c; public void mouseClicked(MouseEvent mevent)setBackground(bgColor); repaint(); 23多个监听器 所有AWT事件源均支持监听器的多点传 送模型。 可以将同一事件发送到多个监听器对象 。 需要向一个事件源添加多个监听器,以 便使所有注册的监听器都能够对事件源 生成的事件作出响应。24匿名类class MyPanel extends Panel public MyPanel() Bu