JAVA事件(台湾)
JAVA事件处理机制
14
使用事件监听器类
import java.awt.*; public class TestButton{ public static void main(String args[ ]) { Frame f = new Frame(“Test”); Button b = new Button(“Press Me!”); b.addActionListener(new ButtonHandler( )); f.add(b, “Center”); f.pack( ); f.setVisible(true) ; } }
12
事件监听器类的编写要点
事件监听器类应该包括以下两部分内容: 事件监听器类应该包括以下两部分内容: 1.在事件监听器类的声明中指定要实现的监听器接口名,如: 在事件监听器类的声明中指定要实现的监听器接口名, 在事件监听器类的声明中指定要实现的监听器接口名 public class MyListener implements XxxListener { … } 2.实现监听器接口中的事件处理方法,如: 实现监听器接口中的事件处理方法, 实现监听器接口中的事件处理方法 public void 事件处理方法名(XxxEvent e) { ...//处理某个事件的代码... } 然后,在一个或多个组件上可以进行监听器类的实例的注册。 然后,在一个或多个组件上可以进行监听器类的实例的注册。如: 组件对象.addXxxListener(MyListener对象);
5
事件处理机制的几个重要概念
注册事件监听器
为了能够让事件监听器检查某个组件(事件源) 是否发生了某些事件,并且在发生时激活事件 处理器进行相应的处理,必须在事件源上注册 事件监听器。这是通过使用事件源组件的以下 方法来完成的:
java十大事件
Java相关的十大事件十大事件1990-1994:Java缘起文/孟岩Larry Wall说,优秀程序员应有的三个特点:懒惰、急躁和傲慢。
Java就是诞生在一群懒惰、急躁而傲慢的程序天才之中。
1990年12月,Sun的工程师Patrick Naughton被当时糟糕的Sun C++工具折磨的快疯了。
他大声抱怨,并威胁要离开Sun转投当时在Steve Jobs领导之下的NeXT公司。
领导层为了留住他,给他一个机会,启动了一个叫做Stealth(秘密行动)的项目。
随着James Gosling等人的加入,这个项目更名为Green。
其目标是使用C++为嵌入式设备开发一种新的基础平台技术,James Gosling本人负责开发一个SGML编辑器。
正如人们事后分析的那样,这位天才的程序员太懒惰,所以没有把C++学好,开发中碰了一头包;太急躁——所以不愿意停下来读读Scott Meyers的新书《Effective C++》;太傲慢——所以轻易地决定开发一中新的编程语言。
他把这种语言命名为C++++--,意思是C++“加上一些好东西,减去一些坏东西”。
显然这个糟糕的名字不可能长命百岁,很快这种颇受同伴喜爱的小语言被命名为Oak。
到了1992年9月,Oak语言连同Green OS和一些应用程序一起发布在称做Start 7的小设备上,从而使之有了第一次精彩的亮相。
随后,Sun开了一家名为FirstPerson的公司,整个团队被转移到这家公司里研发机顶盒,以投标时代华纳公司的一个项目。
这帮天才被技术狂热所鼓舞,开发出了一个高交互性的设备,结果没想到时代华纳公司和有线电视服务商并不愿意用户拥有那么大的控制权,从而在竞标之战中败给了SGI。
Oak的锋芒之锐,竟然把客户都给吓懵了。
Sun沮丧地关闭了FirstPerson,召回了整个团队。
事实证明,传统行业中那些脑满肥肠的保守主义者是腐朽没落的。
回去!回到激情澎湃的IT产业,抓住互联网的大潮,这才是出路!1994年,Oak被命名为Java,针对互联网的新一轮开发如火如荼,一切已经就绪,熔岩在地下奔流,火山即将喷发。
JAVA常用方法事件大全
JAVA常用方法事件大全JAVA是一种面向对象的编程语言,它提供了众多常用方法和事件来满足程序开发的需求。
下面是JAVA常用方法和事件的详细介绍:1. equals(Object obj)方法:用于比较两个对象是否相等。
默认情况下,它比较的是两个对象的引用是否相等,可以根据需要重写该方法,来比较对象的内容是否相等。
2. hashCode(方法:返回对象的哈希码值。
哈希码是一个整数值,用于快速确定对象在哈希表中的位置。
3. toString(方法:返回对象的字符串表示。
默认情况下,它返回的是对象的类名和对象的哈希码值。
4. getClass(方法:返回对象的运行时类。
运行时类是指对象所属的实际类,而不是对象的引用类型。
5. clone(方法:用于创建并返回对象的副本。
该方法是浅拷贝,即只复制对象的引用,而不复制对象本身。
6. finalize(方法:用于在对象被垃圾回收器回收之前执行一些清理工作。
该方法在对象被销毁之前调用。
7. wait(方法:使线程进入等待状态,直到另一个线程通知它被唤醒。
该方法用于线程之间的通信。
8. notify(和notifyAll(方法:用于唤醒一个或多个正在等待的线程。
这些线程在调用wait(方法后被阻塞。
9. get(和set(方法:用于访问对象的属性。
get(方法用于获取属性的值,set(方法用于设置属性的值。
10. Math类:提供了一些常用的数学方法,如绝对值、四舍五入、最大值、最小值等。
11. String类:提供了一系列字符串操作的方法,如连接字符串、查找子串、替换字符等。
12. StringBuffer和StringBuilder类:用于处理可变的字符串。
它们提供了一些方法进行字符串的添加、删除、插入和替换。
13. ArrayList类:动态数组,可以存储任意类型的对象。
它提供了一些方法进行元素的增加、删除、修改和查询。
14. HashMap类:哈希表,用于存储键值对。
JAVA事件处理机制
JAVA事件处理机制Java事件处理机制是指在Java编程语言中,如何有效地处理用户交互的事件。
事件是指程序执行过程中发生的动作或状态变化,例如鼠标点击、键盘输入、窗口关闭等。
在Java中,事件处理机制是通过事件和事件监听器两个主要的组件来实现的。
事件是程序执行过程中的动作或状态变化,例如鼠标点击、键盘输入、窗口关闭等。
Java中的事件是以对象的形式存在,通常是一种继承自java.util.EventObject基类的特定类。
例如,ActionEvent表示一个动作事件,MouseEvent表示一个鼠标事件,WindowEvent表示一个窗口事件等。
事件监听器是用于监听和处理事件的对象。
它是一个实现了特定事件监听接口的类的实例。
Java中定义了一系列的事件监听器接口,如ActionListener、MouseListener、KeyListener等。
事件监听器接口定义了相应事件发生时需要实现的方法。
例如,ActionListener接口中定义了一个actionPerformed方法,用于处理动作事件。
Java事件处理机制的主要步骤如下:1. 注册事件监听器:在Java中,我们首先要注册一个事件监听器,以告诉程序我们要监听哪种类型的事件。
这可以通过调用组件的addActionListener、addMouseListener等方法来实现。
例如,对于一个按钮组件,我们可以通过button.addActionListener(listener)方法注册一个ActionListener监听器。
2. 实现事件监听器接口:接下来,我们需要实现相应的事件监听器接口,以定义事件发生时需要执行的操作。
事件监听器接口通常包含一个或多个处理事件的方法。
我们需要在接口中实现这些方法,以完成事件的处理逻辑。
例如,对于ActionListener接口,我们需要实现actionPerformed方法。
3. 触发事件:当用户执行触发事件的操作时,例如点击按钮、鼠标移动等,事件就会被触发。
java事件详解
java事件详解目前在一些java应用程序的GUI测试工具,可以提供捕获用户操作的能力并在代码被修改之后能够自动回放用户的操作。
文章将分析Java的事件处理模型及其原理,介绍了基于事件源识别的捕获/回放所需要了解的关键技术并给出了两种实现方式。
1、Java事件介绍1.1什么是事件首先我们来回答"什么是事件"这一基本问题。
其实事件本身就是一个抽象的概念,他是表现另一对象状态变化的对象。
在面向对象的程序设计中,事件消息是对象间通信的基本方式。
在图形用户界面程序中,GUI组件对象根据用户的交互产生各种类型的事件消息,这些事件消息由应用程序的事件处理代码捕获,在进行相应的处理后驱动消息响应对象做出反应。
我们在GUI上进行叫化操作的时候,在点击某个可响应的对象时如,按钮,菜单,我们都会期待某个事件的发生。
其实围绕GUI的所有活动都会发生事件,但Java事件处理机制却可以让您挑选出您需要处理的事件。
事件在Java中和其他对象基本是一样的,但有一点不同的是,事件是由系统自动生成自动传递到适当的事件处理程序。
1.2 Java事件处理的演变当java的开发者开始解决用java创建应用程序这一问题时,他们就认识到java事件模型的必要性。
下面对java事件处理的发展做简要的概括。
在JDK1.0的版本采用用的事件模型,提供了基本的事件处理功能。
这是一种包容模型,所有事件都封装在单一的类Event中,所有事件对象都由单一的方法handleEvent来处理,这些定义都在Component类中。
为此,只有Component 类的子类才能充当事件处理程序,事件处理传递到组件层次结构,如果目标组件不能完全处理事件,事件被传递到目标组件的容器。
JDK1.1是编程界的一次革命,修正了前面版本的一些缺陷,同时增加了一些重要的新功能如,RMI、JNI、JDBC、JavaBean。
在事件模型上基本框架完全重写,并从Java1.0模型迁移到委托事件模型,在委托模型中事件源生成事件,然后事件处理委托给另一段代码。
java事件处理机制的基本原理
java事件处理机制的基本原理
Java事件处理机制是基于事件监听器(EventListener)和事件
源(EventSource)的机制。
事件源是触发事件的对象,例如按钮、窗口等。
当事件源上发生某个事件时,事件源会创建一个对应的事件对象,并将该事件对象传递给监听器。
事件监听器是处理特定事件的对象,它实现了对应事件监听器接口。
例如,按钮点击事件的监听器需要实现ActionListener
接口。
当事件源触发事件时,它会将该事件对象传递给所有注册了监听器的对象,监听器会根据事件对象中的信息执行相应的操作。
基本原理如下:
1. 事件源注册监听器:事件源通过调用addXXXListener()方法,将监听器注册到事件源上。
2. 事件源触发事件:当事件源上发生了特定事件(例如按钮被点击),它会创建一个对应的事件对象,并将该事件对象传递给所有注册了监听器的对象。
3. 监听器接收事件:注册了监听器的对象会收到事件对象,并根据事件对象中的信息执行相应的操作。
4. 事件处理:监听器根据事件对象中的信息,执行一系列操作来处理事件。
事件处理机制的优点是低耦合性和可扩展性。
事件源和监听器
是通过接口进行交互,使得它们之间没有强制的依赖关系,从而实现了低耦合性。
同时,事件监听器机制支持多个监听器同时监听同一个事件源,可以方便地扩展和修改事件的处理方式。
Java发生的重大事件
Java发⽣的重⼤事件1990年,在sun公司中,由Patrick naughton、mikesheridan以及james Gosling领导的⼩组Green Team,开发出新的程序语⾔,命名为OAK,后期更名为Java1995年,sun正式发布Java和hotJAVA产品,Java⾸次公开亮相。
1996年1⽉23⽇sun Microsystems发布了JDK1.0.1998年,JDK1.2版本发布。
同时,sun发布了JSP/Servlet、EJB规范,以及将Java分成了J2EE、J2SE和J2ME。
这表明Java开始向企业、桌⾯应⽤和移动设备应⽤3⼤领域挺进。
2000年,JDK1.3发布,Java HotSpot Virtual Machine正式发布,成为Java默认的虚拟机。
2002年,JDK 1.4发布,古⽼的classic虚拟机退出历史舞台。
2003年底,Java平台的scala正式发布,同年Groovy也加⼊了Java阵营。
2004年,JDK1.5发布,同时JDK1.5改名为JavaSE5.0.2006年,JDK 6发布,同年Java开源并建⽴了openJDK,顺理成章,Hotspot虚拟机成为了OpenJDK中默认的虚拟机。
2007年,Java平台迎来了新伙伴Clojure。
2008年,Oracle收购了BEA,得到了JRockit虚拟机。
2009年,Twitter宣布将后台⼤部分程序从ruby迁移到Scala,这是Java平台的有⼀次⼤规模应⽤。
2010年,Oracle收购了sun,获得Java商标和最具价值的hotspot虚拟机。
此时Oracle拥有市场占⽤率最⾼的两款虚拟机hotspot和JRockit,并且计划未来进⾏整合:HotRockit。
2011年,JDK7发布,在JDK1.7u4中,正式启⽤了新的垃圾回收器G1.2017年,JDK9发布,将G1设置为默认GC,替代CMS。
Java讲座-了解Java(台湾版)
入門準備
設定Path
必須告訴作業系統,應該到哪些目錄下嘗 試找到您所想使用的工具程式
設定系統變數中的 Path 環境變數
入門準備
設定Classpath
Java執行環境本身就是個平台,執行於這 個平台上的程式是已編譯完成的Java程式 設定Path變數是為了讓作業系統找到指定 的工具程式(例如Windows exe) 設定Classpath目的就是為了讓Java執行環 境找到指定的Java程式(JVM class)
Java簡介
Java Platform, Micro Edition (Java ME)
作為小型數位設備上開發及部署應用程式 的平台,像是消費性電子產品或嵌入式系 統等 最為人所熟悉的設備如手機、PDA、股票機 等
Java簡介
如何學習Java
使用搜尋引擎
/
‘javac’ 不是內部或外部命令、可執行的程 式或批次檔
Path設定有誤或沒有在Path中加入JDK的 「bin」目錄
入門準備
第一個Java程式
java HelloJava Exception inthread"main" ng.NoClassDefFoundError
java工具程式找不到您所指定的類別
javac工具程式找不到您指定的.java檔案
HelloJava.java:1: class HelloJava is public, should be declared in a file named HellJava.java
類別名稱與主檔名不符
入門準備
第一個Java程式
HelloJava.java:3: cannot find symbol 程式碼中某些部份打錯了,最常發生的原因可 能是沒有注意到字母大小寫
JAVA事件处理机制
JAVA事件处理机制Java事件处理机制是指在Java程序中处理用户触发的事件的一种机制。
事件处理机制的目的是实现程序与用户交互的功能,当用户触发一些特定的事件时,程序会执行相应的操作。
在Java中,事件处理机制基于观察者模式(Observer Pattern)实现。
观察者模式是一种一对多的关系,其中当一个对象(被观察者)状态发生变化时,它的所有依赖对象(观察者)都会被通知并自动更新。
Java中的事件处理包括两个主要的角色:事件源(Event Source)和事件监听器(Event Listener)。
事件源是指触发事件的对象,而事件监听器是负责处理事件的对象。
事件监听器是一个接口,该接口包含一个或多个用于处理事件的方法。
例如,ActionListener接口用于处理按钮点击事件,它包含一个方法actionPerformed(ActionEvent e),当按钮被点击时该方法会被调用。
在Java中,监听器必须先注册到事件源上才能接收到事件。
通过调用事件源的addXXXListener方法,可以将监听器注册到事件源上。
例如,通过调用按钮对象的addActionListener方法,可以将一个ActionListener监听器注册到按钮上。
当事件源上发生了一个特定类型的事件时,它会通知所有注册在它上面的监听器。
监听器会调用相应的方法来处理事件。
例如,当按钮被点击时,按钮对象会通知所有注册在它上面的ActionListener监听器,调用其actionPerformed方法来处理点击事件。
Java事件处理机制的优点包括:1.灵活性:通过事件处理机制,用户可以轻松地实现自定义的事件处理逻辑,以满足特定需求。
不同的事件可以有不同的监听器来处理,从而增强了程序的灵活性。
2.解耦性:通过将事件源和事件监听器分离,事件处理机制实现了对象之间的解耦。
事件源不需要关心具体的事件处理逻辑,它只需要通知监听器即可。
这样,事件源和事件监听器可以独立变化,增加了程序的可扩展性。
盘点:Java在2018年发生的那些大事件
盘点:Java在2018年发生的那些大事件一年过去了,是时候发布新一版Java Advent 日历。
这篇是发布的第六个日历,能够参与这一季的日历让我感到非常荣幸。
比起专门讨论某个主题,我觉得更值得坐下来看看这一年发生的重大事件。
这篇回顾专注于Java 生态,内容应该不会让你感到陌生。
一月在2017年决定开源Java EE 后,Oracle 在1月阐明了自己的命名规范与包命名。
Java EE 守护者公布了他们的立场,关于Java EE 命名和打包的联合社区公开信,文中提出了可能的解决方案。
两周内公布了官方回复。
Red Hat 的Mark Little 在他的博客中进行了总结。
1月份,围绕新标准化过程的相关问题还在进行深入讨论没有答案其他重大新闻,JDK 有了一个孵化器项目。
JEP12 提出了一个新的预览语言或者叫做VM 特性,已经确认、实现但不是长期功能。
可以通过–incubating <version> 标签启用Oracle 还宣布Java 8 更新支持从2018年9月延长到2019年1月有关EE4J 第一个版本发布的信息开始披露二月Java EE 新名字决定了:社区对Jakarta EE 还是Enterprise Profile 进行了投票,最终Jakarta EE 获胜。
提交了EE.next 工作组草案原本计划2018年3月20日发布GA 版本,Java 10 RC1 发布了,这是Oracle六个月发布周期之后的第一次升级同样在这个月,第一个EE4J 项目创建了项目的GitHub 账号。
第一批提交并没有让人印象深刻的内容,包含的API 项目并没有提供实现,看起来有点混乱Apache NetBeans 9.0 beta 发布,对Java 9 模块系统提供完整支持三月Spring Boot 2.0 发布,支持Java 9这个月,Oracle 宣布从OpenJDK 中移除JavaFX。
Java事件处理机制(自定义事件)实例详解
Java事件处理机制(⾃定义事件)实例详解Java事件处理机制java中的事件机制的参与者有3种⾓⾊:1.event object:事件状态对象,⽤于listener的相应的⽅法之中,作为参数,⼀般存在与listerner的⽅法之中2.event source:具体的事件源,⽐如说,你点击⼀个button,那么button就是event source,要想使button对某些事件进⾏响应,你就需要注册特定的listener。
3.event listener:对每个明确的事件的发⽣,都相应地定义⼀个明确的Java⽅法。
这些⽅法都集中定义在事件监听者(EventListener)接⼝中,这个接⼝要继承 java.util.EventListener。
实现了事件监听者接⼝中⼀些或全部⽅法的类就是事件监听者。
伴随着事件的发⽣,相应的状态通常都封装在事件状态对象中,该对象必须继承⾃java.util.EventObject。
事件状态对象作为单参传递给应响应该事件的监听者⽅法中。
发出某种特定事件的事件源的标识是:遵从规定的设计格式为事件监听者定义注册⽅法,并接受对指定事件监听者接⼝实例的引⽤。
具体的对监听的事件类,当它监听到event object产⽣的时候,它就调⽤相应的⽅法,进⾏处理。
先看看jdk提供的event包:public interface EventListener:所有事件侦听器接⼝必须扩展的标记接⼝。
public class EventObject extends Object implements Serializable所有事件状态对象都将从其派⽣的根类。
所有 Event 在构造时都引⽤了对象 "source",在逻辑上认为该对象是最初发⽣有关Event 的对象。
(1)通过DoorEvent.java⽂件创建DoorEvent类,这个类继承EventObject。
java 台湾通行证正则
Java 台湾通行证正则是一种用于验证台湾通行证号码格式的正则表达式。
台湾通行证号码通常由英文字母和数字组成,总长度为9位。
其中,第1位为英文字母,第2位为数字,第3位为英文字母,第4-9位为数字。
因此,可以使用正则表达式来验证台湾通行证号码的格式是否符合要求。
一个简单的正则表达式可以如下所示:^[A-Z][1-2][0-9]{7}$。
其中,^表示匹配字符串的开始位置,[A-Z]匹配任意一个大写字母,[1-2]匹配数字1或2,[0-9]{7}匹配七位数字,$表示匹配字符串的结束位置。
因此,该正则表达式可以用来验证台湾通行证号码是否符合规定的格式。
通过编写和使用台湾通行证正则表达式,可以在Java程序中快速、准确地验证用户输入的台湾通行证号码的格式,从而提高系统的安全性和稳定性。
这对于涉及台湾通行证号码验证的各类应用程序来说都是非常重要的。
因此,合理地使用正则表达式可以有效地提高程序的效率和可靠性。
java 事件委托实例
java 事件委托实例标题:Java事件委托实例详解在Java编程中,事件处理是一个常见的任务,它允许程序对用户的操作或者系统的状态变化进行响应。
事件委托是事件处理的一种重要机制,通过这种方式,我们可以将事件处理器的职责委托给其他对象,使得代码更加模块化和易于维护。
以下我们将通过一个具体的Java事件委托实例,详细解析其工作原理和实现步骤。
一、理解事件委托事件委托,也称为事件代理或事件处理委托,是一种设计模式,它允许一个对象(称为“委托者”或“事件源”)将事件处理的任务委托给另一个对象(称为“处理器”或“监听器”)。
这种模式的主要优点是增强了代码的灵活性和可扩展性,因为处理器可以动态地添加或移除,而无需修改委托者的代码。
二、Java中的事件模型在Java中,事件模型主要包括三个部分:事件源、事件和事件处理器。
事件源是生成事件的对象,如按钮、列表等;事件是描述某种事情发生的数据对象,如鼠标点击、按键按下等;事件处理器是处理事件的接口或类,它定义了处理特定事件的方法。
三、Java事件委托实例以下是一个简单的Java Swing应用程序,其中包含一个按钮和一个文本框。
当我们点击按钮时,希望文本框能显示一条消息。
我们将使用事件委托来实现这个功能。
首先,我们需要创建一个实现了ActionListener接口的类,这个类将作为我们的事件处理器:javaimport java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class MyActionListener implements ActionListener { private JTextField textField;public MyActionListener(JTextField textField) {this.textField = textField;}Overridepublic void actionPerformed(ActionEvent e) {textField.setText("Button clicked!");}}在这个类中,我们重写了actionPerformed方法,这是ActionListener 接口定义的处理动作事件的方法。
Java的事件处理机制
Java的事件处理机制概念部分:1.事件:Event是一种消息对象,封装了与事件发生相关的信息,如操作键盘会引发KeyEvent事件,单击关闭按钮会引发WindowEvent事件,单击命令按钮或选择菜单项目会引发ActionEvent事件等等2.事件源:Event Source产生事件的对象,如命令按钮和单选按钮都是事件源,单击他们时,会引发ActionEvent事件单选按钮会产生ItemEvent事件。
3.事件监听器:Event Listener在事件发生时,事件源负责给予通知的一种对象。
接收到事件通知的监听器主动的对事件进行处理。
两件事:将自己注册给事件源;事件的处理4.事件处理器Event Handler事件处理方法,用来接受事件并处理事件的方法。
Java事件处理的步骤:1.类实现相应的事件监听器接口2.重写接口中抽象方法3.给事件源注册事件监听器【例题】关闭窗口的实现public class NotepadDemo{private Frame mainForm;private MenuBar mb;private Menu m1;private Menu m2;private MenuItem mExit;private MenuItem mi1;private MenuItem mi2;private ExitHandler eh;public NotepadDemo(){mainForm = new Frame();mb = new MenuBar();m1 = new Menu("文件(F)");m2 = new Menu("编辑(E)");mi1 = new MenuItem("新建 Ctrl + N");mi2 = new MenuItem("打开 Ctrl + O");mExit = new MenuItem("退出(X)");mainForm.setMenuBar(mb);mb.add(m1);mb.add(m2);m1.add(mi1);m1.add(mi2);m1.add(mExit);mainForm.setBounds(0, 0, 400, 300);eh = new ExitHandler();//注册事件监听器mExit.addActionListener(eh);mi1.addActionListener(eh);mi2.addActionListener(eh);//注册Form的关闭监听器mainForm.addWindowListener(eh);}public void NotepadShow(){mainForm.setVisible(true);}public static void main(String[] args) { NotepadDemo nd = new NotepadDemo();nd.NotepadShow();}//实现事件监听器接口class ExitHandler implements ActionListener,WindowListener{//重写其中的抽象方法public void actionPerformed(ActionEvent e) {if(e.getSource()==mExit){System.exit(0);}else if(e.getSource()==mi1){System.out.println("新建按钮被按下");}else if(e.getSource()==mi2){System.out.println("打开按钮被按下");}}public void windowActivated(WindowEvent arg0) {//激活窗口 P190}public void windowClosed(WindowEvent arg0) {//窗口关闭时}public void windowClosing(WindowEvent arg0) {//退出窗口System.exit(0);}public void windowDeactivated(WindowEvent arg0) { //窗口非激活时}public void windowDeiconified(WindowEvent arg0) { //窗口非图标化时}public void windowIconified(WindowEvent arg0) {//窗口图标化时}public void windowOpened(WindowEvent arg0) {//窗口打开时}}}【练习】两个窗体,每个窗体上各有一个按钮,当点击此按钮时显示另外一个窗体public class FrameChangeDemo {public int n = 1;Frame1 f1;Frame2 f2;public FrameChangeDemo(){f1 = new Frame1();f2 = new Frame2();}public static void main(String[] args) {FrameChangeDemo fcd = new FrameChangeDemo();}class Frame1 extends Frame{Button btn;public Frame1(){this.setBounds(0,0,400,300);btn = new Button("显示窗体2");btn.setBackground(Color.red);btn.addActionListener(new BtnHandle());this.add(btn);this.setTitle("窗体1");this.setVisible(true);}}class Frame2 extends Frame{Button btn;public Frame2(){this.setBounds(0,0,400,300);btn = new Button("显示窗体1");btn.setBackground(Color.green);btn.addActionListener(new BtnHandle());this.add(btn);this.setTitle("窗体2");this.setVisible(false);}}class BtnHandle implements ActionListener{public void actionPerformed(ActionEvent e) { if(n==1){f1.setVisible(false);f2.setVisible(true);n=2;}else if(n==2){f1.setVisible(true);f2.setVisible(false);n=1;}}}}。
java的事件处理机制
java的事件处理机制
Java的事件处理机制是一种用于处理用户与界面元素交互的方法。
当用户执行某些操作(如点击按钮、按下键盘或移动鼠标等)时,Java将触发一个相应的事件,然后系统将调用相应的事件处理程序来响应该事件。
Java的事件处理机制包括以下几个步骤:
1. 创建事件对象:当某个事件发生时,Java会创建一个对应的事件对象,该对象包含了事件的详细信息,如事件的类型、发生的时间和发生的位置等。
2. 注册事件监听器:事件监听器是用于监听特定事件的类。
当某个事件发生时,系统将自动调用该事件监听器的相应方法来处理该事件。
开发者需要在代码中注册事件监听器,以便在事件发生时能够处理它。
3. 事件分发:当某个事件发生时,系统将该事件对象分发给相应的事件监听器。
事件监听器将根据事件对象的类型和信息来决定如何处理该事件。
4. 事件处理:事件监听器将调用相应的方法来处理事件。
该方法通常在事件监听器类中定义,并实现了特定的事件处理逻辑。
5. 更新界面:在事件处理完成后,系统可能会更新界面以反映事件的结果。
例如,当用户点击一个按钮时,系统可能会显示一个对话框或更新一个文本框的内容。
Java的事件处理机制提供了灵活和可扩展的方式来处理用户与界面元素的交互。
通过使用事件监听器和事件处理程序,开发者可以轻松地编写出响应用户操作的代码,从而实现更加丰富的交互功能。
Java语言中的事件及其处理
Java语言中的事件及事件处理在GUI界面程序中,为了使程序能够接收用户的命令,系统应该能够识别这些鼠标和键盘的操作(事件)并做出响应。
在此将讨论事件的产生和响应。
8.1 事件处理通常每一个键盘或鼠标操作会引起一个系统预先定义好的事件,程序只需要定义每个特定事件发生时应该做出的响应。
在Java中,除了键盘和鼠标操作外,系统的状态改变、标准图形界面元素等都可以引发事件。
8.1.1 事件事件处理对GUI界面的程序设计是必不可少的。
程序等候用户执行一些操作,用户通过GUI界面控制程序执行操作的顺序。
例如,在例7.3中创建了一个选课的GUI界面,使用鼠标选中所要的课程之后,单击按钮执行按钮事件处理程序,将选中的课程在文本框中显示。
这种方法就称为事件驱动程序设计。
1.事件组件一个事件包含以下3个组件:(1)事件对象在Java中,每一个事件(Event)都是对象。
Java.util.EventObjrct是所有事件对象的根类。
这里只介绍的事件对象只属于其中的一类。
这一类事件对象的根类是java.awt.AWTEvent,它是EventObject的直接子类。
从名称上可以看出这一类事件对象都是与用户界面有关的。
在java的定义中,每一个事件对象都有其事件发起者和事件使用者。
事件发起者对应了将要介绍的事件源,而事件使用者对应事件监听器。
同时,为了在使用事件时能够访问到事件源,在每一个事件对象中都保存了一个指向事件源的引用。
由于用户对组件的操作有所不同,因此java为这些不同类型的操作定义了相应的事件:当用户通过按键或单击鼠标与应用程序交互时,一个事件便产生了。
操作系统捕获该事件及与其相关的数据,例如,事件发生的时间和事件类型(按键、单击鼠标)。
然后,数据被传递给事件所属的应用程序处理。
(2)事件源顾名思义,事件源就是事件的源头,即事件产生的地方。
Java中的事件源种类很多,在此介绍的事件源指的是组件。
事件源是产生事件的对象。
Java中的常见事件及处理探究
Java中的常见事件及处理探究作者:潘国荣来源:《电脑知识与技术》2018年第29期摘要:事件是Java Swing可视化开发中一个非常重要和基础的概念。
该文就Swing组件编程中事件的概念、事件处理委托模型、常用事件及主要响应方法作一论述。
关键词: Java;事件;响应方法中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)29-0125-021事件概念在Java图形用户界面中,当用户进行点击命令按钮、移动鼠标、按下或弹出键、关闭窗体等操作时,都会产生事件。
产生事件的对象是事件源,通常就是各个组件,例如按钮。
利用鼠标、键盘对事件源的操作统称为事件。
对这些事件做出响应的程序,称为事件处理器。
2事件处理委托模型在Java中,事件源产生事件之后,并不像其他编程技术那样由事件源对象直接处理事件,而是委托给“第三方”进行处理,这个“第三方”就是Java中的事件监听器对象。
这种处理事件的方式,称为委托事件模型,它充分利用了接口设计的特点,使得事件源和事件类设计和事件处理器类分离。
事件监听器能维护事件源的信息,能“监听”、“遍历”事件源产生的事件,能找到并执行相应的事件响应方法。
3 主要事件4事件处理的主要步骤按照前述分析,在Java中,事件处理的主要步骤有3步:1)定义一个类,使该类实现事件对应的监听器接口;2)对事件源(组件)产生的事件进行注册监听;3)重写(覆盖)监听器接口中的事件处理方法。
事件响应方法可以在本类、外部类实现,也可以在内部类、匿名类中实现。
通过内部类的方法,内部类可以是匿名类,也可以不是匿名类,这种方法不需要声明事件监听器接口。
5 结束语通过上述例程代码可以看出,编制事件处理的响应方法还是非常灵活的,通常情况下,如果程序要处理的比较复杂,可以在单独定义的外部类中实现,如果程序要处理的比较简单,在自身类中实现可能更为方便,初学者及开发人员可以根据需要进行选择。
Java讲座-例外处理(台湾版)
例外處理入門
public class CheckArgsDemo { public static void main(String[] args) { try { System.out.printf("執行 %s 功能%n", args[0]); } catch(ArrayIndexOutOfBoundsException e) { System.out.println("沒有指定引數"); e.printStackTrace(); } } }
throw、throws
• 在方法中會有例外的發生,而您並不想在 方法中直接處理,而想要由呼叫方法的呼 叫者來處理
– 使用“throws”關鍵字 – java.ioBufferedReader的readLine()方法就聲 明會丟出java.io.IOException
private void someMethod(int[] arr) throws ArrayIndexOutOfBoundsException, ArithmeticException { // 實作 }
}
例外的繼承架構
try { throw new ArithmeticException("例外測試"); } catch(ArithmeticException e) { System.out.println(e.toString());
}
catch(Exception e) { System.out.println(e.toString()); }
例外的繼承架構
繼承自 Throwable Throwable Error LinkageError 嚴重的系統錯誤, ThreadDeath 不用處理也無法 VirtualMachineError 處理 .... 繼承自 Exception Throwable ClassNotFoundException CloneNotSupportedException Checked IllegalAccessException exception,編譯 .... 器要求您要處理 RuntimeException ArithmeticException ArrayStoreException ClassCastException ....
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java講座(七)Java and Event Handling圖文‧李盈嫻( Luna Lee )一、前言在上一個章節,我們做出了美美的圖形使用者介面,可是,我們做的圖形介面要怎樣才能跟使用者產生互動呢?例如當使用者按下按鈕或移動滑鼠時,程式要做出什麼相對應的動作,畫面會產生什麼變化等等。
在此,我們就要藉由『Event Handling』的觀念來完成。
本章將會介紹Event的基本觀念,Listener的實作方法,最後並應用到聊天室的範例上。
二、內容什麼是Event當我們在寫程式時,多半會需要與使用者互動或回應其指令。
在古早古早的以前,若有一支程式想要回應使用者按下滑鼠的動作,可能得要辛苦的寫一大堆code自己去抓相關的資訊。
例如,在這支程式被initial 了之後,就要有一支迴圈不斷地去檢查使用者的滑鼠到底被按下去了沒有。
這種polling programming的方法,一來浪費系統資源,二來所有要處理的回應與動作都在一個大迴圈中而顯得複雜了許多。
而Java的AWT則採用event-driven programming的方法來達成此目的,當某個特定的事件發生,就會驅動程式去執行某些特定的動作,而可與使用者產生即時的互動。
其中有三個要素:•Event – 意指某個特定的事件、動作,也就是「發生了什麼事件」。
例如:視窗關閉、滑鼠移動。
•Event Source – 產生、觸發事件的元件。
例如:Button、TextField。
•Event Handler – 負責接收Eventobject並作處理的Method。
在Java中把Events以物件來表示,並依type分類為不同的classes。
有些負責表示較高階的事件(元件本身狀態或內容的改變),如ActionEvent、TextEvent;有些則表示較低階的事件(元件與環境間的溝通,像鍵盤或滑鼠相關的動作),例如KeyEvent、MouseEvent。
而除DocumentEvent外,所有event classes的super class皆為java.util.EventObject。
我們在(圖1) 列舉了一些在GUI程式設計中常見,重要的Event classes及其階層關係。
(讀者若有需要,也可自行查閱Java API,看看還有哪些Event classes可用。
)圖1Java是怎麼處理這些Event的呢Java在JDK1.0版本以前,本來是採用階層事件模式(hierarchy model),然而JDK1.1之後,就整個Event Model翻新,改採了委託事件模式(delegation event model)。
如前所述,當中有三個要素:”Event Source”(在此為某個元件aComp),產生了某個”Event object”(在此表描述發生事件的XXEvent),而由”Event Listener”負責處理這個Event(在此表含有Event Handler,專責處理事件的aListener)。
圖2因為當XXEvent產生時,只會通知有註冊過的Listener。
所以對aComp,就必須要先把XXEvent『註冊』給要負責處理的aListner。
而對aListner,他則必須要有『執照』,才有資格去處理Event。
其關係圖如(圖2) 所示。
所以委託事件模式,讀者可以將之想像成是一台註冊機,可以讓我們註冊所有想要擷取的事件,而當使用者啟動的事件並不是我們所想要的事件時,就不加以理會。
如此一來可以增加系統的效能,而且整個事件處理的架構也清楚很多。
Event怎麼註冊前面提及Event依照type來分類,不同的動作會產生不同type的Event,而不同的Event type,Java定義了其相對應的Event Listener。
所謂註冊,就是在我們有興趣的元件上,依想擷取的Event type不同,指定給他一個相對應的Event Listener的動作。
我們在程式上以aComp.addXXListener (aListener) 來完成。
透過註冊,才知道什麼事件發生,要丟給哪一個Listener去處理。
對於aComp,它把XXEvent註冊給相對應的XXListener。
對aListener,它就可以監控aComp的XXEvent。
系統一但抓到aComp發生了這種type的Event,就會通知已註冊了的aListener。
例如,我們對button按下的事件感興趣,在此button是我們的evnet source,button按下會產生ActionEvent,所以我們要註冊一個相對應的ActionListener去監視ActionEvent type的事件。
註冊的程式碼及關係圖如(圖3) 所示。
aButton.addActionListener(aListener)圖3除此之外,我們也要知道,一個event source可以被好幾個listener所註冊,如(圖4) ;同樣地,一個listener也可以註冊好幾個event source。
圖4Listener怎麼取得執照而要成為Listener也不是隨便一個class說當就當的成的,必須要具有『執照』才有資格當。
所以我們寫的class,必須透過『implements一個 listener interface』的動作來取得執照。
而由於所有的Event Listener都是一種interface,裡面只有定義這個Listener 所提供的抽象method,只有殼子而沒有內容。
所以我們在class宣告的地方implements一個listener interface後,aComp aListenerXXEvent還必須去實作出此listener interface內所有的method,我們針對事件所作處理的程式碼就寫在此method中。
我們以按下鍵盤的事件為例,它會產生出KeyEvent,假設我們想寫一個MyClass 作為處理鍵盤按下事件的Listener。
為了替MyClass取得合格的Listener執照,則首先,在MyClass宣告的地方要implements KeyListener;再來,我們由(表1) 得知KeyListener總共有keyPressed(), keyReleased(), keyTyped()三個method,所以在MyClass中要實作此三個method。
由於在此,我們只對按鈕按下有興趣,因此我們的程式碼就寫在keyPressed()這method中,另外兩個method,只需實作完成,內容留空白表不做事即可。
•implement XXListenerpublic class MyClass implements KeyListener{public void keyPressed(KeyEvent e){//…. 此處撰寫處理事件的動作…}public void keyReleased(KeyEvent e){//…. 空的}public void keyTyped(KeyEvent e){//…. 空的}}此處要注意,若讀者對interface有基本概念,應該要知道一但implements了某個interface,裡面有多少個抽象method,一定要全部實作出來,否則程式在編譯時,就會有錯誤出現了!依照這樣的原則,其實有好幾種方法都可以讓我們實作出一個Listener來。
除了直接在class宣告的地方implements某個listener lnterface外,在此,我們再介紹兩種常見的模式:•extends XXAdapter由於大多數的listener interface都有超過一個以上的method需要被實作,但我們可能只需要其中一個而已。
為了讓我們更方便撰寫程式,Java特別提供了『Adapter』這種class。
它是具體的class,而且事實上,它就implements了listener inferface,並且幫我們把所有的method都實作出來了,只是所有的method都不作任何事,內容是空的。
所以我們可以直接繼承Adapter,就取得了Listener的執照,我們只要再針對有需要的method,用override method的方式去改寫,內容放入我們要寫的程式處理即可。
如此一來,就不用再一個一個method 自己去實作,而且也避免了不小心漏寫某個method會發生的編譯錯誤了唷。
public class MyAdapter extends KeyAdapter{ public void keyPressed(KeyEvent e){//要做的事……}}•use inner class利用Adapter來寫Listener雖然很方便,但萬一有時候我們的程式要用到Applet 而不是Application怎麼辦呢?由於Java 不允許多重繼承,所以我們的class根本不能同時繼承Applet和KeyAdapter。
這個時候我們可以用inner class的寫法來解決這個問題。
以下為一個使用anonymous inner class來寫Listener的範例。
public class MyClass extends Applet {….JButton b=new Jbutton(”按我”);b.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){// 要做的事…… }}); … }由於不同的模式,各有其優缺點,讀者只要把握取得Listener 執照的基本精神,再依整個程式的概念架構,就可自行變化、選擇自己比較適合的事件處理模式了。
Event Handling 的撰寫原則所以在事件處理上總共要注意三件事:一是source 為何,也就是什麼元件要被處理,例如按鈕;二是什麼樣的Event 要被處理,在該元件上就要加上addXXListener(),註冊一個listener 去處理此Event ;第三,就是撰寫處理事件的程式碼啦!以按下按鈕為例,處理這個事件的程式碼就必須寫在actionPerformed()中。
只要把握這三點,相信對讀者來說,寫Event Handling 就不會是太困難的事囉!AWT vs Swing Listener通常我們會以AWT 所提供的Event Listener 來處理較低階的事件,而Swing 所提供的Listener 更為豐富,可用來處理較高階的事件。
(表1) 及 (表2) 我們各列出了AWT 及Swing 的Event Listener 、其相對應的Adapter ,以及它提供了哪些method 要我們實作。