+GUI编程中的事件处理机制详细讲解+(1)
GUI图形界面编程之事件处理机制
GUI图形界⾯编程之事件处理机制事件处理机制三要素:事件源:能够产⽣事件的组件事件:⽤户对组件的⼀个操作事件监听器:接收事件、解释事件并处理⽤户交互的⽅法处理事件源发⽣的事件事件处理机制:当组件(⽐如 Button)被点击时就会产⽣ActionEvent事件,事件被传递给⼀个 ActionListener 对象,再由ActionListener 定义的⽅法来响应处理事件(⾃动调⽤ActionEvent)当事件发⽣后,将某事件的对象传递给事件监听器(事件监听器实现了发⽣此事件所对应的接⼝),事件监听器会处理此事件,为了监视此事件,事件的处理⽅要先向发⽣⽅注册事件有很多种,监听事件所实现的接⼝也有很多种。
监听哪件事,就必须实现此事件的接⼝。
事件与监听事件的接⼝⼀⼀对应按钮事件处理机制:按钮事件(ActionEvent):组件的特定动作(⽐如被按下)发⽣时,由组件(⽐如Button)⽣成此⾼级别事件要使⽤键盘在Button上触发ActionEvent,请使⽤空格键监听器接⼝:ActionListener⼀个监听器监听⼀个事件源对象import java.awt.BorderLayout;import java.awt.Button;import java.awt.Frame;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;/****程序功能:*时间:* @author Administrator*/public class Test1 {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stub//创建⾯板及按钮Frame f=new Frame();Button b=new Button();f.add(b,BorderLayout.NORTH);f.setVisible(true);f.setResizable(true);f.pack();//创建监听器Monitor bh=new Monitor();//事件注册:表⽰监听器bh监听对象b,当事件发⽣后,调⽤接⼝中的⽅法b.addActionListener(bh);}}class Monitor implements ActionListener{//当事件触发时执⾏此⽅法//当事件发⽣后,把此事件具体信息封装成对象传递给此函数的参数epublic void actionPerformed(ActionEvent e){System.out.println("Press\n");}1个监听器监听多个事件源对象import java.awt.BorderLayout;import java.awt.Button;import java.awt.Frame;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;/****程序功能:*时间:* @author Administrator*/public class Test1 {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stub//创建⾯板及按钮Frame f=new Frame();Button b1=new Button();Button b2=new Button();f.add(b1,BorderLayout.NORTH);f.add(b2,BorderLayout.CENTER);f.setVisible(true);f.setResizable(true);f.pack();//创建监听器Monitor bh=new Monitor();//事件注册:表⽰监听器bh监听对象b,当事件发⽣后,调⽤接⼝中的⽅法b1.addActionListener(bh);b2.addActionListener(bh);//重设提⽰b2.setActionCommand("Stop");}}class Monitor implements ActionListener{//当事件触发时执⾏此⽅法//当事件发⽣后,把此事件具体信息封装成对象传递给此函数的参数epublic void actionPerformed(ActionEvent e){System.out.println("Press\n"+e.getActionCommand());}}TextField 对象可能发⽣Action(光标在⽂本框中敲回车)事件,与该事件对应的事件类是java.awt.event.ActionEvent. java.awt.event.ActionListener接⼝处理ActionEvent事件创建⽂本框并实现⽂本框输⼊显⽰到命令⾏中⽂本框输⼊内容不可见import java.awt.Frame;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class Test2 {public static void main(String[] args) {// TODO Auto-generated method stubnew TextFieldDemo();}class TestFieldDemo extends Frame {TestField tf=null;Monitor2 m=null;TestFieldDemo(){//创建⾯板tf=new TestField();this.add(tf);this.setVisible(true);this.pack();//设置此⽂本字段的回显字符(⽤于输⼊密码)tf.setEchoChar('*');//创建监听器m=new Monitor2();//注册tf.addActionListener(m);}}class Monitor2 implements ActionListener{public void actionPerformed(ActionEvent e){TextField tf=(TextField)e.getSource();System.out.println(tf.getText());tf.setText("");}}内部类:可以⽅便的访问包装类的成员变量或成员⽅法。
javagui知识点总结
javagui知识点总结一、Swing GUI组件Swing是Java中用于创建GUI的一套组件库,它提供了丰富的GUI组件,包括按钮、文本框、标签、列表框、表格等等。
这些组件可以通过代码进行创建、配置和操作,从而构建出丰富多彩的用户界面。
Swing组件还支持丰富的外观和行为定制,可以通过设置各种属性和监听器来满足不同的需求。
1.1 按钮(Button)按钮是Swing中最基本的GUI组件之一,它通常用于触发某个操作或事件。
在Swing中,按钮可以通过JButton类来创建,可以设置按钮的文本、图标、颜色、大小、位置等属性,并为按钮添加各种监听器来处理用户的点击事件。
1.2 文本框(TextField)文本框用于接受用户的输入,可以通过JTextField类来创建,可以设置文本框的默认文本、颜色、大小、位置等属性,并通过添加文本变化监听器来实时监测用户的输入。
1.3 标签(Label)标签用于显示静态文本信息,可以通过JLabel类来创建,可以设置标签的文本、字体、颜色、大小、位置等属性,还可以通过添加鼠标事件监听器来实现交互式标签。
1.4 列表框(ListBox)列表框用于显示一组选项供用户选择,可以通过JList类来创建,可以设置列表框的选项、颜色、大小、位置等属性,并为列表框添加选择事件监听器来处理用户的选项选择。
1.5 表格(Table)表格用于显示和编辑二维数据,可以通过JTable类来创建,可以设置表格的数据模型、列模型、传输器、颜色、大小、位置等属性,并为表格添加各种监听器来处理表格的编辑和选择事件。
二、事件处理在Java GUI编程中,事件处理是至关重要的一部分,它用于实现用户界面和用户交互的逻辑。
Swing组件提供了丰富的事件类型,包括鼠标事件、键盘事件、焦点事件、窗口事件等等,开发人员可以通过添加事件监听器来处理这些事件,从而实现用户交互的各种效果。
2.1 事件监听器(EventListener)事件监听器是一种特殊的接口,用于监听和处理特定类型的事件。
第5章 Java GUI事件处理设计-Java语言GUI程序设计-赵满来-清华大学出版社
5.3.6 组件专用事件监听器
1. 窗口事件WindowEvent WindowListener接口 WindowFocusListener接口 WindowStateListener接口 2. ItemEvent事件 ItemListener监听器接口 3. CaretEvent事件 CaretListener接口
例5.4 要求用户登录界面中用户名和密码都 只能使用字母和数字字符,请进行校验。
chap05项目erLogin1 class CharaDidiListener extends
java.awt.event.KeyAdapter { // …… }
5.2.5 独立监听器类
引发产生事件的组件对象称为事件源。
1. 计算机输入输出设备产生的中断事件 2. GUI系统触发的逻辑事件 3. 应用程序触发的事件
5.1.2 Swing的事件处理机制——事件 驱动
1. 多线程与并发多任务
进程是一个具有一定独立功能的程序在一 个数据集上的一次动态执行的过程。
并发:在一个时间段内多个进程处于运行 过程之中。
把事件监听器类定义为一个独立的类,不 在任何类的内部。
如果监听器只是应用于一个组件,则应采 用匿名内部类或lambda表达式实现
如果监听器类要被同一个界面中的多个组 件用到,则应该采用实名内部类
如果多个不同的界面都使用了同样的监听 器类,则宜采用独立监听器类
5.3 常用事件监听器
5.3.1 鼠标事件 MouseEvent:鼠标点击和鼠标移动事件 MouseWheelEvent:鼠标滚轮事件
(1)定义一个XxxEvent事件类,描述GUI的 Xxx事件。
(2)定义一个事件处理器接口XxxListener, 声明所有与该事件相关的处理方法。
JavaGUI事件处理机制之探究
(上接第99页)程序的开发和整合。以JCheckBox 复选框为例,程序框架代码如下:
public class Test3 extends JFrame{ JCheckBox jcb=new JCheckBox(); jcb.addhemListener(new Test4()); class Test4 implements ItemListener{
ItemEvent
ltemListener
itemStateChanged(hemEvent)
KeyEvent
KeyListener
KeyAdapter
keyPressed(KeyEvent) keyReleased(KeyEvent)
keyTyped(KeyEvent)
1.2事件处理流程 以事件源为JButton为例,首先要定义一个 类(如Test)去实现监听接口ActionListener, 此时Test类对象即为监听者对象,其次利用 addActionListener(new Test())方法为事件 源JButton对象注册监听者,当JButton对象被 单击,其会产生一个ActionEvent事件对象,监 听者对象监听到此事件后,立即对事件进行处 理,即调用ActionListener接口中的唯一方法 actionPerformed(ActionEvent)去响应该单击 事件。 2事件处理机制应用方式 鉴于程序的不同规模和要求,可以选择不同 的创建监听者对象,进而进行Java GUI事件处理 的方式。 2.1主类作为监听者 在小型Java GUI应用程序中,通常用主类作 为监听者,去实现一个或多个监听接口。此种方式 将事件源的定义、监听接口的实现、注册监听者对 象、事件的产生和处理都集中在一个类(主类)中 完成,应用简单。适用于小规模应用程序的开发。 以JButton为例,程序框架代码如下:
Java GUI控件及事件编程技术及应用
的容器组件并且可以移动、放大、缩小、关闭等。
(3)容器组件其中最常用的方法是: add()---添加其它组件
setLayout()---设置容器组件内的各个组件的摆放方式
(它们的具体用法请参见文档的11.4节的介绍)。
(4)容器的主要作用 是实现图形界面和组织其它组件。
3、容器组件的创建
(1)在init()或Frame的构造函数中内,首先创建出容 器组件对象并实例化它,然后设置布局方式。 (2)分别创建出在容器内待包含的各个基本组件并实例 化它们。 (3)调用容器的add( )函数将各个基本组件加入到容器 内。 ( 4 ) 再 调 用 add( ) 将 各 个 子 容 器 加 入 到 Applet 中 或 Frame的主窗框中;然后注册各个基本组件和容器的事 件监听器对象。 ( 5 )对 Frame 容器则需要调用 setVisible(true) 调显示 出其内的各个组件,而对Dialog容器则需要调用show() 显示出其内的各个组件。 (以TestPanel.java为例讲解编程规则)
BorderLayout布局策略
BorderLayout:将容器内的空间划分为东、南、西、 北、中五个方位,并指明组件所在的方位,它是 Window、Dialog、Frame的缺省布局方式;
CardLayout布局策略
GridLayout布局策略
(5)指定布局方式 创 建 指 定 布 局 方 式 类 的 对 象 , 然 后 调 用 容 器 类 的 setLayout()方法来指定所需的布局方式。
5、Java AWT中基本组件
(1)含义
基本组件(从Component类派生)----它不能独立 地显示出来并且在其内不能再包含其它的组件。
第五章GUI程序设计及事件驱动机制
5.1 GUI概述
图形用户界面(GUI,Graphics User Interface)是软件 产品与用户交互的接口,是软件产品中用户可以看到并 直接操作的部分。如图4-1所示,Java语言集成开发工 具JCreator提供了良好的用户 界面,使用户编写Java程序 变得简单。用户通过图形界 面向计算机系统发布命令、 控制操作,系统的结果也以 图形界面方式显示给用户。
5.1.3 颜色、字体和图形(续)
比如,要使用一个红色对象,下面几种方法都 可以实现: Color.red Color.RED new Color(255,0,0) new Color(1.0,0.0,0.0)
class FillPanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; // draw a rectangle double leftX = 100; double topY = 100; double width = 200; double height = 150;
1.Graphics类 Graphics类是所有图形上下文的抽象基类,允许应 用程序在组件上进行图形绘制。由于不能直接创建对 象,一般通过以下两种方法获得该对象: 调用paint()/ paintComponent(Graphics g)或 update()方法,系统自动获取当前界面的Graphics 对象作为参数传递给GUI程序; 调用Component类的getGraphics()方法。 比如,想在窗口中绘制一个矩形,下面的语句就 可以实现。 Graphics g=frame.getGraphics(); g.drawRect(30,60,140,40);
Java GUI设计与事件处理
setVisible(boolean)来控制对话框的可见性 String fileName = fd.getFile(); 一般与事件无关 下拉菜单 (Choice)
setBackground——设置组件的背景颜色。
setVisible——设置组件是否可见。 setBounds——重新设置组件的大小和位置。
Chapter8 Java GUI设计与事件处理
Page
9 / 45
在框架中加入其他组件
框架本身是一个容器。容器是图形用户界面中可以容纳其他 组件的特殊组件,一个容器中可以容纳一个或多个组件,甚
复选框 (Checkbox)
Page
提供简单的on/off开关 Checkbox c1 = new Checkbox(“Red”,null, true); setEnable(false)设置为只读 当复选框发生改变时,会激发ItemEvent事件
提供单项选择。每个选项是相关联、互斥的 首先构造一个CheckboxGroup对象,然后为这个Group添加Checkbox setEnable(false)设置为只读 当复选框发生改变时,会激发ItemEvent事件
Chapter8 Java GUI设计与事件处理
Page
8 / 45
Frame类主要方法
Component类是所有GUI对象的祖先,Window类是 Frame类的父类。
对于Frame外观的操作比较重要的方法如下: setTitle——设置窗口中标题栏的文字。 setResizable——设置用户是否可以改变框架大小。 dispose方法——关闭窗口,并回收该窗口的所有资源。 setSize——设置组件的大小。
T07 GUI事件处理
–4-1
1,适配器(adapter)是实现XXXListener接 口的抽象类. 2,通过adapter类来实现监听可以缩短程 序代码,直接通过继承/内部类来实现处理 方法. 3,但当需要多种监听器或该类已经有父类 的时候,就不能通过适配器来实现事件监 听.
事件适配器Adapter
–4-2
java.awt.event包中定义的事件适配器类:
事件处理机制
处理事件 处理 两个律师"监听" 两个律师"监听"他的不同行为
他"授权"给不同的律师 授权" 处理不同的事件
事件处理机制
使用授权处理模型进行事件处理的一般方法归纳 如下:
1,对于某种类型的事件XXXEvent, 定义相应的事件 监听器类,该类需要实现与该事件相对应的接口 XXXListener; 2,事件源实例化以后,必须进行授权,注册该类事 件的监听器,使用addXXXListener(XXXListener ) 方法来注册监听器.
事件类
AWTEvent-5-1
1,与AWT有关的事件都是jva.awt.AWTEvent 生的. 2,AWT事件分为两大类 :
低级事件:基于组件和容器的事件. 低级事件
如:鼠标的进入,点击,拖放等,或组件的窗口开关等.
高级事件:基于语义的事件,它不和特定的动作相关联, 高级事件 而依赖于触发此事件的类.
AWTEvent-5-4
Mouse Event包含的事件: Event
当鼠标按下时触发该事件 当鼠标释放时触发该事件 当点击鼠标时触发该事件 当鼠标进入指定区域时触发该事件 当鼠标退出指定区域时触发该事件
MouseMotion Event包含的事件: MouseMotion Event
java 实验4 GUI标准组件及事件处理
Java程序设计实验报告题目:GUI标准组件及事件处理学院:计算机科学学院专业:08教育技术学01班姓名:赵小龙学号:40809020105GUI标准组件及事件处理一、实验目的掌握常用GUI控制组件及其事件处理。
二、实验内容1.编程包含一个标签和一个按钮,单击按钮时,标签的内容在“你好”和“再见”之间切换运行结果:2.编程包含一个单选按钮组和一个普通按钮,单选按钮组中包含三个单选,文本说明分别为“普通”、“黑体”和“斜体”。
选择文本标签为“普通”的单选按钮时,普通按钮中的文字为普通字体,选择文本标签为“黑体”的单选按钮时,普通按钮中的文字的字体为黑体,选择文本标签为“斜体”的单选按钮时,普通按钮中的文字的字体为斜体。
3.编程创建一个Frame,实现窗口的监听器接口。
三、思考题1.Java的事件处理机制是怎样的?答:事件处理机制⏹事件处理器(事件处理方法)事件处理器是一个接收事件对象并进行相应处理的方法。
事件处理器包含在一个类中,这个类的对象负责检查事件是否发生,若发生就激活事件处理器进行处理。
⏹事件监听器接口与事件监听器类事件监听器类a.包含事件处理器,并负责检查事件是否发生,若发生就激活事件处理器进行处理的类叫做事件监听器类。
其实例就是事件监听器对象。
事件监听器类必须实现事件监听器接口或继承事件监听器适配器类。
b.事件监听器接口定义了处理事件必须实现的方法。
事件监听器适配器类是对事件监听器接口的简单实现。
目的是为了减少编程的工作量。
c.事件监听器接口和事件监听器适配器类也都包含在java.awt.event和javax.swing.event包中。
注册事件监听器⏹为了能够让事件监听器检查某个组件(事件源)是否发生了某些事件,并且在发生时激活事件处理器进行相应的处理,必须在事件源上注册事件监听器。
这是通过使用事件源组件的以下方法来完成的:addXxxListener(事件监听器对象)Xxx对应相应的事件类。
第十一章 GUI异常处理
2006-12-5
13
编写代码的步骤: 1. 定义一个实现监听器接口的类 2. 为这个类创建一个实例 3. 通过调用addXXXListener()方法,将这个方 法传递给监听器类的实例
2006-12-5
14
import java.awt.*;
import java.awt.event.*;
public class TestButton { public class ButtonHandler implements ActionListener { private Frame f; public void actionPerformed(ActionEvent e) { private Button b; System.out.println("Action occurred"); public TestButton() { System.out.println("Button's command is: " f = new Frame("Test"); + e.getActionCommand()); b = new Button("Press Me!"); } b.setActionCommand( } "ButtonPressed"); } public void launchFrame() { b.addActionListener(new ButtonHandler()); f.add(b,BorderLayout.CENTER); f.pack(); f.setVisible(true); } public static void main(String args[]) { TestButton guiApp = new TestButton(); unchFrame(); } }
第17讲 Java GUI事件处理
import java.awt.*; import java.awt.event.*; import javax.swing.*; class MouseEventTest extends JFrame implements MouseMotionListener{ JTextArea t; MouseEventTest(){ super("MouseEvent Test"); init(); Container c = this.getContentPane(); c.setLayout(new FlowLayout()); c.add(new JLabel("鼠标移动测试")); c.add(new JScrollPane(t)); this.setSize(350,220); this.setVisible(true); }
3)重写actionPerformed方法
组件侦听到了事件,自动生成了ActionEvent对象 ,提交给侦听器,由侦听器安排“事件处理器”进行事 件处理。ActionListener接口中的方法actionPerformed 即是“事件处理器”,原型是: public void actionPerformed(ActionEvent a)
界面设计 界面组件共有二类:单行文本框和按钮。文本框初始 内容为空白,按钮均为文本按钮。 界面布局可采用FlowLayout的流式布局管理,当给文 本框恰当的宽度,给窗口以合适的尺寸时,按钮会自 动转到文本框下行显示。 事件处理 按钮应对用户的点击有反应,文本框中显示的是计数 信息。 设一个计数器作为类的成员变量,当用户点击时计数 器增值,并组织任务要求的格式文本,用文本框的 setText方法置入文本框。
JAVA学习--第10章 GUI事件处理
江苏大学软件工程课程组
Page 13
内部类
使用内部类的事件处理: 为事件处理使用内部类使你能够访问外部类的专用数据.
好处:
可以方便的访问包装类的成员 可以更清楚的组织逻辑,防止不应该被其它类访问的类进 行访问
江苏大学软件工程课程组
Page 3
事件委托模型
委托事件模型实现步骤: 委托事件模型实现步骤 1 确定事件源 确定事件源(GUI组件 组件) 组件 2 确定监听者 3 注册事件 4 建立事件源和监听者的联系
注册 实现了某种监听器 实现了某种监听器 接口的类的对象 接到事件对象后 进行某种处理
事件源对象
抽 象 类 java.awt.event.MouseAdapter实 现 了 MouseListener接 口 ,可以使用其子类作为MouseEvent的监听器,只要重写其相应的方法 即可. 对于其他的监听器,也有对应的适配器. Repaint() update() paint() 当我们应用程序的逻辑要对系统界面进行更新时,调用repaint() 方 法来通知AWT线程进行刷新操作.repaint() 方法实际会让AWT线程 去调用另外一个方法,update.update方法在默认情况下会做两件 事,一是清除当前区域内容,二是调用其paint()方法完成实际绘制 工作.
江苏大学软件工程课程组
Page 2
事件处理机制
事件:是一种描述发生情况的对象 事件源:能够产生事件的对象都可以成为事件源,如文本框,按钮,下 拉式列表等.也就是说,事件源必须是一个对象,而且这个对象必须是 Java认为能够发生事件的对象. 监视器:需要一个对象对事件源进行监视,以便对发生的事件作出处理. 事件源通过调用相应的方法将某个对象作为自己的监视器. 事件处理器:是一个方法,它接收事件对象,对其进行解码并处理用户 的交互.
Java GUI 之事件处理模型
事件委托(delegation)处理模型中的四要素 事件委托(delegation)处理模型中的四要素
1、事件源:导致事件产生的组件。 事件源:导致事件产生的组件。 2、事件:事件对象 事件: 3、事件监听器:针对特定事件的事件监听(类型)对象。 事件监听器:针对特定事件的事件监听(类型)对象。 4、事 件服务程序:事件产生时所执行的程序。 件服务程序:事件产生时所执行的程序。
图
涉及到的角色
二、具体处理者(ConcreteHandler)角色、 具体处理者(ConcreteHandler)角色、 处理接到请求后,可以选择将请求处理掉, 处理接到请求后,可以选择将请求处理掉, 求传给下家。 或者将请 求传给下家。下图给出了一个示 。 意性的类图。 意性的类图。
图
责任链模式的静态类结构
涉及到的角色
一、抽象处理者(Handler)角色、定义出一 抽象处理者(Handler)角色、 个处理请求的接口;如果需要, 个处理请求的接口;如果需要,接口可以 : 定义出一个方法,以返回对下家的引用。 定义出一个方法,以返回对下家的引用。 下图给出了一个示意性的类图: 下图给出了一个示意性的类图:
事件处理四要素的联系
产生
事件源 事件
注册
事件监听接口
传递
事件服务程序
实现
事件处理设计要做3 事件处理设计要做3件事
给事件源填加监听器 给事件源填加监听器 add() 设计一个监听器的实现类, 设计一个监听器的实现类,其含有实践服 务的代码,其实现监听器中的事件服务方 务的代码,其实现监听器中的事件服务方 此称为事件服务类 事件服务类。 法。此称为事件服务类。 用事件服务类创建一个对象, 用事件服务类创建一个对象,作为上述注 册事件监听器的实参。 册事件监听器的实参。
第一章 GUI1_概述、容器、布局
GUI概述 概述
组件是一个可以以图形化的方式显示在屏幕上并 组件是一个可以以图形化的方式显示在屏幕上并 能与用户进行交互的对象.例如一个按钮, 能与用户进行交互的对象.例如一个按钮,一个 菜单,一个标签等. 菜单,一个标签等. 组件不能独立地显示出来, 组件不能独立地显示出来,必须将组件放在一定 的容器中才可以显示出来. 的容器中才可以显示出来. ponent是许多组件类的父类 是许多组件类的父类, 类ponent是许多组件类的父类, Component类中封装了组件通用的方法和属性 类中封装了组件通用的方法和属性, Component类中封装了组件通用的方法和属性, 如图形的组件对象,大小,显示位置, 如图形的组件对象,大小,显示位置,前景色和 背景色,边界,可见性等, 背景色,边界,可见性等,因此许多组件类也就 继承了Component类的成员方法和成员变量. Component类的成员方法和成员变量 继承了Component类的成员方法和成员变量.
GUI概述 概述
组件相应的成员方法包括: 组件相应的成员方法包括: 相应的成员方法包括
getFont() getForeground() getName() getSize() paint(Graphics g) repaint() update() setVisible(boolean b) setSize(Dimension d) name)等等 等等. setName(String name)等等.
Swing特性 特性
(a) Metal L&F
(b) CDE/Motif L&F
(c) Windows L&F
Swing特性 特性
支持高级访问方式:所有Swing组件都实现了 Accessible接口,提供对非常规高级访问方式的支 持,使得一些辅助功能如屏幕阅读器等能够十分方 便地从Swing组件中得到信息. 支持键盘操作:在Swing组件中,使用JComponent 类的registerKeyboardAction( )方法,为Swing组 件提供热键,能使用户通过键盘操作来代替鼠标驱 动Swing组件的相应动作.
GUI系统的事件机制
所谓事件就是指发送给GUI系统的消息,该消息通知GUI系统某种事情已经发生,要求作出响应。
事件根据来源可分为以下几种:1.计算机输入输出设备产生的中断事件,如鼠标和键盘同GUI系统的交互操作。
这种事件是最原生的“底层”事件,一般都需要组件做深入处理,籍此触发更高抽象层次具有语义的逻辑事件。
为GUI系统扩展自定义组件往往需要编写处理这些事件,派发高级逻辑事件。
Swing中这些事件对应的有MouseEvent、KeyEvent等。
2.GUI系统触发的逻辑事件。
这种事件是1中所提的原始事件经过组件的处理后发出的高级事件,比如Swing的JButton产生的ActionEvent。
另外通知界面重绘的Paint事件也是高级逻辑事件,这种事件在接收到EXPOSE事件或系统显式调用repaint方法后触发的事件。
3.应用程序触发的事件。
应用程序主动触发新事件可以有两种方式来进行,第一种是事件通过添加到系统事件队列进行派发。
Swing中通过postEvent、repaint及invokeLater等方法,向系统事件队列添加事件。
这种触发机制实质上是调度,触发事件的线程和事件派发线程可以不是同一个线程。
事件被添加到系统事件队列后触发过程结束,而之后事件的处理要在事件派发线程上等待执行。
第二种是通过调用组件的派发方法(Swing中是fireEventXXXX)触发。
使用这种方法,事件对象不会被放到系统事件队列中去,而是直接传递给事件处理方法处理。
它的触发机制实质上是函数调用。
这种事件触发方式要求事件处理线程必须同时是事件派发线程。
GUI系统的事件模型根据事件处理线程和事件派发线程的关系可分为两种,一种是单线程模型,另一种是多线程模型。
单线程模型是指事件的处理线程和派发线程是同一线程。
事件从事件队列中取出之后,立即在当前线程中处理,处理完后才取下一个事件继续循环。
多线程模型是指事件派发线程只负责从事件队列中获取事件。
Java应用开发与实践第8章GUI事件处理机制
... ... // 事件处理器代码 } }); 其它代码... ... }
8.5 实训8 GUI事件处理基础练习
任务1:利用单选框对窗口颜色进行改变
要求:使用3个单选框对窗口的颜色及窗口里的文字进 行改变,需要实现ActionListener接口,对于单选框控件 ,还需要用到ButtonGroup类。
外部事件
产生并传递事件
接收事件对象事件,
对象事件
激活事件处理器
事件对象
图形界面程序事件源
注册监听
监听器对象 (含事件处理器)
8.2 事件处理与事件监听
1. 事件 事件是用户在图形用户界面上的一个操作(通常使用各
种输入设备比如:鼠标、键盘等来完成)。 当一个事件发生时,该事件用一个事件对象来表示,事
MouseListener MouseMotionList ener
itemStateChang ed() mouseClicked()
mousePressed()
mouseReleased()Βιβλιοθήκη 8.2 事件处理与事件监听
8.2.3 事件适配器
接收鼠标事件的抽象适配器类MouseAdapter、接收窗口 事件的抽象适配器类WindowAdapter、接收键盘事件的 抽象适配器类KeyAdapter、用于接收组件事件的抽象适 配器类ComponentAdapter等。
8.2 事件处理与事件监听
3. 事件处理器(事件处理方法) 事件处理器是一个接收事件对象并进行相应处理的方法。 事件处理器包含在一个类中,这个类的对象负责检查事件 是否发生,若发生就激活事件处理器进行处理。因此,把 事件处理器所在的这个类,叫做事件监听器类。
10、GUI事件
Java事件处理举例 如果用户用鼠标单击了按钮对象 button,则该按钮button就是事件源, 而java运行时系统会生成ActionEvent类 的对象e,该事件对象中描述了该单击 事件发生时的一些信息,然后,事件处 理者对象将接收由java运行时系统传递 过来的事件对象e并进行相应的处理。
10.1.2 Java事件处理机制
第10讲 GUI事件
10.1 事件处理
10.1.1 事件 在一个GUI程序中,通常一个操作将引发一个系统 预先定义好的事件,用户程序只要编写代码定义每个 事件发生时程序应做出何种响应即可。这些代码会在 它们对应的事件发生时由系统自动调用,这就是GUI程 序中事件和事件响应的基本原理。 在Java中,事件源和事件处理是分开的,一般组件 都不处理自己的事件,而将事件处理委托给外部的处 理实体,这种事件处理模型称为授权处理模型。 事件的行为多种多样,由不同的监听器处理。编写 事件处理程序首先应确定关注的事件属于何种监听器 类型。
•
不同事件类型注册侦听器的方法名不同 例如: 给按钮注册一个动作事件侦听器: public void addActionListener(ActionListener l) abutton.addActionListener(aActionListener); 给框架注册一个窗口事件侦听器: public void addWindowListener(WindowListener l) aframe.addWindowListener(aWindowListener); • 关于事件侦听器 Java中的事件侦听器都是一些接口 例如: public interface WindowListener public interface ActionListener 作为事件侦听器的对象必须是实现了一个合适接口的类的对象(实际 上是约定一种类型的事件源只能注册到相应的侦听器) 如何确定侦听器所要实现的接口类型??? 事件源(组件)中有相应的事件注册方法 addXXXListener(XXXListener) 方法中的参数类型提供了要实现的接口的类型
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
public void componentRemoved(ContainerEvent e)
添加到组件的方法
ItemListener
使用它的常见AWT类 Checkbox, Choice, List
接口定义的方法
public void itemStateChanged(ItemEvent e)
由于事件监听器接口是Abstract类型,意谓着实现该接口的类应全部实现其各个成员函数,但实际应用中可能只需处理某些事件响应代码;此时再采用实现事件监听器接口可能会导致编程复杂。JDK中提供事件适配器方式来实现事件编程。
①每一种监听器接口有相应的适配器类,程序员只需让事件处理类从某一适配器类派出而不采用实现监听器接口的方式,这样仅需重写用户感兴趣的相应函数体代码。各个事件监听器接口相相应的事件适配器类如下:
4)事件编程的基本原则:
事件处理的类代码要对某一类事件加以处理,则应实现它们所对应的接口,并且给出该接口中定义的全部事件响应函数的功能实现(重写其函数体);然后在创建组件时注册该事件的监听器(响应者)。
5)事件注册:
事件源通过对特定的事件进行注册,以指定该事件的监听器(响应者)是谁。
public void mouseExited(MouseEvent e)
添加到组件的方法
MouseMotionListener
使用它的常见AWT类
接口定义的方法
public void mouseDragged(MouseEvent e)
public void mouseMoved(MouseEvent e)
使用它的常见AWT类 Button, List, TextField
接口定义的方法
public void actionPerformed(ActionEvent e)
添加到组件的方法
Obj.addActionListener(ActionListener l)
AdjustmentListner
各个事件类的说明:
EventObject:所有事件类的超类
最重要的方法-- getSource(),返回产生某事件的对象
AWTEvent:所有AWT事件类的超类
最重要的方法-- getID(),返回某事件的ID号,事件的ID是一个整数,它指定事件的类型,例如按钮事件或鼠标点击事件
ItemEvent:从选择项,复选框或列表中选择时发生
KeyEvent:操作键盘时发生
MouseEvent:操作鼠标时发生
PaintEvent:描绘组件时发生的一个事件
TextEvent:更改文本时发生
WindowEvent:操作窗口时发生的事件,如最大化或最小化某一窗口。
ActionEvent:激活组件时发生的事件
AdjustmentEvent:调节可调整的组件(如移动滚动条)时发生的事件
ComponentEvent:操纵某组件时发生的一个高层事件
ContainerEvent:向容器添加或删除组件时发生
InputEvent:由某输入设备产生的一个高层事件
(3)利用事件响应函数中的事件对象获取事件产生时的相关信息(event.getSource())事件源对象,event.getX(), event.getY(),事件产生时的鼠标位置,event.getActionCommand(),获取组件的字符串名称。
9)各个事件监听器接口
ActionListener
Байду номын сангаас
WindowListener ------WindowAdapter
MouseListener -----MouseAdapter
MouseMotionListener----- MouseMotionAdapter。
②在事件注册时,应将监听器设为适配器的派生类(子类)对象,该适配器类中事件响应函数将被执行。(责任编辑:龚勋)
3)事件委托授权处理模型
JDK1.1以上版本实现了事件委托授权处理模型的机制。
① 事件源:产出事件的组件。
② 监听器:对组件所产生的事件作出具体响应的代吗,即事件产出与处理分别由两个不同类(它们可以分别放在不同的程序中)加以编程实现。
③ 事件处理机制:AWT组件自身不编程处理相应的事件,面是交由事件监听器(它可以是组件所在的容器类或另外的Java程序类,只要它们实现了相关的事件监听器接口即可)处理(事件授权处理模型)。
implements ActionListener,MouseMotionListener,MouseListener
{
public void init()
{ this.addActionListener(this);
this.addMouserMotionListener(this);
接口定义的方法
public void mouseClicked(MouseEvent e)
public void mousePressed(MouseEvent e)
public void mouseReleased(MouseEvent e)
public void mouseEntered(MouseEvent e)
添加到组件的方法
FocusListener
使用它的常见AWT类
接口定义的方法
public void focusGained(FocusEvent e)
public void focusLost(FocusEvent e)
添加到组件的方法
KeyListener
使用它的常见AWT类
}
else if(event.getActionCommand()=="组件的标签名字符文字"
{
}
}
public void mouseDragged(MouseEvent event)
{ //利用事件响应函数中的事件对象获取事件产生时的相关信息
int x=event.getX();
this.addMouseListener(this);
}
public void actionPerFormed(ActionEvent event)
{
if(event.getSource()==SourceObject)
{ //利用事件响应函数中的事件对象获取事件产生时的相关信息
(1)组件对事件的响应形式:忽略它(本类不实现对应的监听器接口)或编程事件函数以处理它(可根据应用需要替换某一个组件的相应缺省事件处理函数,从而响应用户对该组件的操作。本类实现某类事件对应的监听器接口,并实现对应的响应函数),也可屏蔽它(将其事件响应函数体置空)。
(2)事件响应类(监听器)可以实现多个监听器接口,以响应多组不同事件,从而可使同一个组件可以注册多种事件。
6)事件注册函数:
函数名由“add + 事件类型对应的监听器接口名称”组成;函数参数为监听器对象(实现事件响应的类的对象,如容器组件自身响应该事件,则监听器对象应用this代表)。
public void add< listenerType >(< listenerType > ListenerObj)
{
}
7)事件编程步骤:
①实现某一事件的监听器接口(定义事件处理类并实现监听器接口)。
②在事件处理类中重写(实现)其事件处理的函数体。
③在创建AWT组件时注册事件处理代码以指定该事件的监听器(响应者)是谁。
public class ButtonActionEvent extends Applet
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
添加到组件的方法
TextListener
使用它的常见AWT类 TextField, TextArea
接口定义的方法
public void textValueChanged(TextEvent e)
添加到组件的方法
WindowListener
使用它的常见AWT类
接口定义的方法
使用它的常见AWT类
接口定义的方法
public void componentResized(ComponentEvent e)
public void componentMoved(ComponentEvent e)
public void componentShown(ComponentEvent e)
int y=event.getY();
}
public void mouseMove(MouseEvent event)
{
}
}
Java GUI编程中的事件处理机制详细讲解 (2)
发布时间:2007.06.15 05:44 来源:赛迪网技术社区 作者:dxaw
8)事件编程的基本规则:
接口定义的方法
public void keyTyped(KeyEvent e)
public void keyPressed(KeyEvent e)public void keyReleased(KeyEvent e)
添加到组件的方法
MouseListener
使用它的常见AWT类