java中事件的定义,什么是java中的事件处理
如何解决写爬虫IP受阻的问题?立即使用。
在学习java事件之前,对java内部类、java通用组件、容器、布局管理器、java抽象窗口工具包有一定的了解。结合以下知识点可以制作一些简单的窗口程序。(推荐:java视频教程)
Java语言使用授权事件模型来处理事件。在这个模型下,每个组件都有相应的事件,如按钮点击事件、文本字段内容改变事件等。
当事件被触发时,组件会将事件发送到组件注册的每个事件侦听器。事件监听器定义对应于不同事件的事件的处理。这时候事件监听器会根据不同的事件信息调用不同的事件处理程序来完成这个事件的处理。只有在事件监听器被触发后,它才会接收事件信息。
这种模式的显著特点是,当一个组件被触发时,它不自己处理,而是把处理操作交给第三方。例如,当在GUI中单击一个按钮时,该按钮是一个事件源对象,按钮本身无权响应这一单击。它所做的是将信息发送给它注册的侦听器(事件处理程序,本质上是一个类)进行处理。
要理解java的事件处理,我们需要理解以下三个重要的总结。
(1)、Event——事件由用户操作生成。
(2)事件源EventSource 3354是生成事件的组件。
(3)事件处理方法EventHandle3354事件处理方法
1、事件处理基本原理
当一个事件在一个按钮上被触发时,虚拟机生成一个click事件对象,然后在按钮上查找注册的相关处理方法,也就是事件源,并将事件对象发送给这个方法,这个方法被执行。
示例程序:
在下面的程序中,JButton jb是事件源,ClickAction是事件处理程序,JB . addactionlistener(a);将事件源与事件处理程序相关联,当click事件在事件源上发生时,执行ClickAction中定义的代码。
源代码如下:
导入Java . awt . event . action event;
导入Java . awt . event . action listener;
导入javax . swing . jbutton;
导入javax . swing . jframe;
公共类EventTest {
公共静态void main(String[] args) {
JFrame j=new JFrame(示例程序1 );
//1.事件源jb按钮是事件源,因为你必须点击它。
JButton JB=new JButton( click );
//2、事件处理程序ClickAction表示事件处理程序。
click action a=new click action();
//3.关联,它将事件源与事件处理程序A关联起来,这意味着执行A的单击操作会发生。
JB . addactionlistener(a);
//将jb源事件添加到窗口。
j.getContentPane()。add(JB);
j . pack();
j . set visible(true);
}
}
//事件处理程序,点击是一个动作事件。
类ClickAction实现ActionListener{
@覆盖
public void action performed(action event e){
//TODO自动生成的方法存根
system . out . println( hello );
}
}2、事件对象
在上面的例子中,ActionEvent是一个事件对象,当按下JButton时由JButton生成。事件被传递给通过注册监听器注册的ActionListener对象,通过它可以获取事件发生的时间、事件的来源等最常见的信息。
ActionEvent的常用方法如下:
(1)String getActionCommand():返回与这种动作相关的命令字符串。默认组件是标题。
(2)int getModifiers():返回该动作发生时同时按下的键盘按钮。
(3)long getWhen():当此事件发生时,返回事件的长形式。
示例程序:
源代码如下:
导入Java . awt . event . action event;
导入Java . awt . event . action listener;
导入Java . util . date;
导入javax . swing . jbutton;
导入javax . swing . jframe;
导入javax . swing . jlabel;
导入javax . swing . jpanel;
公共类EventTest2 {
公共静态void main(String[] args) {
JFrame j=new JFrame(示例程序2 );
JPanel jp=new JPanel();
JLabel j1=新JLabel(请点击);
JButton JB=new JButton( click );
JButton jb1=new JButton( click );
点击动作2 a=新点击动作2();
jb1。addactionlistener(a);//如果jb1上发生了行动事件就执行a里面的代码
JB。addactionlistener(a);
jp。add(J1);
jp。add(JB);
jp。添加(jb1);
j。add(jp);
j.setSize(400,200);
j。设置可见(真);
}
}
类点击操作2实现动作监听器{
//事件发生时,执行的操作方法会被虚拟机调用,事件对象回传给该方法
@覆盖
已执行公共无效操作(操作事件e){
//TODO自动生成的方法存根
long d=e . get when();//事件发生的事件
日期日期=新日期(d)提供信息;//转化为相应的时间
System.out.println(日期);
JButton sou=(JButton)e . getsource();//发生的事件源
sou.setText(点不着);//将点击发生的按钮的按钮设为点不着
//如果没有设置过动作命令,默认得到的是按钮的标题
string com=e . getactioncommand();
System.out.println(命令为: com );
}
}3、事件类型
图形界面开发中由很多的事件,这些事件以事件对象为顶层和类,按事件的类型构成了一个树形结构。
具体见下图:
事件对象是所有事件类的父类,它里面包含两个方法:
、对象getSource():最初发生事件的对象
(2)、String toString():返回此事件对象的线表示形式。
通过getSource():能够知道事件是在那个对象上发生的。
关于其他事件类的含义,在下面会给出几个类的源码解释和简单演练。
鼠标事件类
当在一个组件上按下,释放,点击,移动或者拖动时,就会触发鼠标事件。
导入Java。awt。事件。鼠标事件;
导入Java。awt。事件。鼠标监听器;
导入javax。挥棒。jframe
公共类MouseListenerTest {
公共静态void main(String[] args) {
JFrame j=新JFrame(我的窗口);
MouL w=new MouL();
j。addmouse侦听器(w);
j.setSize(100,100);
j。设置可见(真);
j。setdefaultcloseoperation(JFrame .EXIT _ ON _ CLOSE);
}
}
类莫尔实现鼠标监听器{
@覆盖
单击了公共void鼠标(鼠标事件e){
//TODO自动生成的方法存根
System.out.println(鼠标的位置: e.getX(), e . gety());
System.out.println(点击发生了);
}
@覆盖
按下公共void鼠标(鼠标事件e){
//TODO自动生成的方法存根
System.out.println(按下);
}
@覆盖
公共void鼠标释放(鼠标事件e){
//TODO自动生成的方法存根
System.out.println(松开);
}
@覆盖
公共void鼠标输入(鼠标事件e){
//TODO自动生成的方法存根
System.out.println(鼠标进入了窗口);
}
@覆盖
公共void鼠标退出(鼠标事件e){
//TODO自动生成的方法存根
System.out.println(鼠标离开了窗口);
}
}窗口事件类
窗口事件,窗口打开,关闭,最大化,最小化时,都会触发窗口事件
导入Java。awt。事件。窗口事件;
导入Java。awt。事件。窗口侦听器;
导入javax。挥棒。jframe
公共类WindowsListenerTest {
公共静态void main(String[] args) {
JFrame j=新JFrame(我的窗口);
window lw=新窗口l();
j。addwindowlistener(w);
j.setSize(100,100);
j。设置可见(真);
j。setdefaultcloseoperation(JFrame .EXIT _ ON _ CLOSE);
}
}
WindowL类实现windows listener {
@覆盖
公共打开的无效窗口(窗口事件e){
//TODO自动生成的方法存根
System.out.println(窗口打开时我执行窗口打开’);
}
@覆盖
公共void窗口关闭(窗口事件e){
//TODO自动生成的方法存根
系统。出去。println(“窗口关闭”);
}
@覆盖
公共无效窗口关闭(窗口事件e){
//TODO自动生成的方法存根
System.out.println(窗口关闭时我执行窗口关闭);
}
@覆盖
公共空的窗口图标化(窗口事件e) {
//TODO自动生成的方法存根
System.out.println(窗口最小化时我执行窗口图标化);
}
@覆盖
已识别公共无效窗口(窗口事件e){
//TODO自动生成的方法存根
System.out.println(窗口回复时我执行窗口dei封闭’);
}
@覆盖
公共无效窗口已激活(窗口事件e){
//TODO自动生成的方法存根
System.out.println(窗口变成活动状态时我执行鼠标点击’);
}
@覆盖
公共无效窗口被停用(窗口事件e){
//TODO自动生成的方法存根
System.out.println(窗口变成不活动状态时我执行窗口停用’);
}
}容器事件类
当一个组件被加到容器中时或者从一个容器中删除一个组件时,会触发事件。
导入Java。awt。事件。容器侦听器;
导入javax。挥棒。jbutton
导入javax。挥棒。jframe
导入javax。挥棒。jpanel
公共类容器事件{
公共静态void main(String[] args) {
JFrame j=新JFrame(我的窗口);
ContL w=new ContL();
JPanel jp=new JPanel();
jp。addcontainerlistener(w);
JButton del=new JButton(删除);
JButton add=new JButton( add );
jp.add(添加);
jp。add(del);//触发组件添加了
jp。删除(del);//触发组件删除了
getContentPane().add(jp);
j.setSize(100,100);
j。设置可见(真);
j。setdefaultcloseoperation(JFrame .EXIT _ ON _ CLOSE);
}
}
类别控制实现集装箱监听器{
@覆盖
添加了公共void组件(Java。awt。事件。容器事件e){
//TODO自动生成的方法存根
System.out.println(组件添加了);
}
@覆盖
公共void组件已移除(Java。awt。事件。容器事件e){
//TODO自动生成的方法存根
System.out.println(组件删除了);
}
}焦点事件
鼠标点击等操作会让一个组件得到或者失去焦点。当一个组件得到焦点的时候,或者失去焦点的时候,就会触发焦点事件
导入Java。awt。事件。焦点事件;
导入Java。awt。事件。焦点听众;
导入javax。挥棒。jbutton
导入javax。挥棒。jframe
导入javax。挥棒。jpanel
公共类焦点测试{
公共静态void main(String[] args) {
JFrame j=new JFrame( key test );
JPanel jp=new JPanel();
JButton J1=new JButton( 1 );
JButton J2=新JButton( 2 );
J1。addfocuslistener(new FocusL());
J2。addfocuslistener(new FocusL());
jp。add(J1);
jp。添加(J2);
j。add(jp);
j.setSize(600,500);
j。设置可见(真);
}
}
类FocusL实现焦点侦听器{
@覆盖
公共空的焦点增益(焦点事件e) {
//得到聚焦事件发生时的对象,转化为按钮
//TODO自动生成的方法存根
JButton j=(JButton)e . getsource();
//得到按钮的标题
string title=j . gettext();
系统。出去。println(聚焦间隙:按钮标题获得焦点);
}
@覆盖
公共void focusLost(FocusEvent e) {
//TODO自动生成的方法存根
JButton j=(JButton)e . getsource();
string title=j . gettext();
System.out.println(focusLost:按钮标题失去焦点);
}
}4、多重监听器
一般情况下,事件源可以产生多种不同类型的事件,因而可以注册(触发)多种不同类型的监听器。
一个事件源组件上可以注册多个监听器,一个监听器可以被注册到多个不同的事件源上。
导入Java。awt。事件。鼠标事件;
导入Java。awt。事件。鼠标监听器;
导入Java。awt。事件。mousemotionlistener
导入javax。挥棒。jframe
导入javax。挥棒。jtextfield
公共类多重监听测试{
公共静态void main(String[] args) {
JFrame a=新JFrame(事件处理);
JTextField JF=new JTextField();
a.add(jf,”南);
MouseM m=new MouseM();
//同一事件源上注册两个事件监听程序
//鼠标的监听程序如点击等
答。addmouse侦听器(m);
//鼠标移动的监听程序
答。addmousemotionlistener(m);
a.setSize(200,200);
答。设置可见(真);
}
}
MouseM类实现MouseMotionListener,MouseListener{
@覆盖
单击了公共void鼠标(鼠标事件e){
//TODO自动生成的方法存根
系统。出去。println( clicked x: e . getx(),y: e . gety());
}
@覆盖
按下公共void鼠标(鼠标事件e){
//TODO自动生成的方法存根
系统。出去。println(鼠标按下);
}
@覆盖
公共void鼠标释放(鼠标事件e){
//TODO自动生成的方法存根
系统。出去。println( mouseRelsased );
}
@覆盖
公共void鼠标输入(鼠标事件e){
//TODO自动生成的方法存根
系统。出去。println(“鼠标回车”);
}
@覆盖
公共void鼠标退出(鼠标事件e){
//TODO自动生成的方法存根
系统。出去。println(“鼠标兴奋”);
}
@覆盖
公共void鼠标被拖动(鼠标事件e){
//TODO自动生成的方法存根
System.out.println(拖动: e . get point());
}
@覆盖
公共void鼠标移动(鼠标事件e){
//TODO自动生成的方法存根
System.out.println(移动: e . get point());
}
}5、事件适配器(Event Adapter)
为简化编程,JDK针对大多数事件监听器接口定义了相应的实现类——事件适配器类,在适配器中,实现了相应监听器接口中的所有的方法,但不做任何事情。
所以定义的监听器类可以继承事件适配器类,并只重写所需要的方法。
有如下适配器:
- ComponentAdapter(组件适配器)
-集装箱适配器(容器适配器)
- FocusAdapter(焦点适配器)
-密钥适配器(键盘适配器)
-鼠标适配器(鼠标适配器)
- MouseMotionAdapter(鼠标运动适配器)
- WindowAdapter(窗口适配器)
鼠标适配器示例程序:鼠标监听器中由多个方法,但在这里只实现了mouseClicked()
包裹图形界面设计;
导入Java。awt。事件。鼠标适配器;
导入Java。awt。事件。鼠标事件;
导入javax。挥棒。jframe
公共类适配器测试{
公共静态void main(String[] args) {
JFrame z=新JFrame(事件适配器测试);
z.setSize(500,400);
MouseLS a=new MouseLS();
//注册z上的鼠标事件处理程序,发生点击等事件执行a里的代码
z。addmouse侦听器(a);
z。设置可见(真);
z。setdefaultcloseoperation(JFrame .EXIT _ ON _ CLOSE);
}
}
MouseLS类扩展鼠标适配器{
单击了公共void鼠标(鼠标事件e){
//打印出鼠标点击时的x点和y点的坐标
System.out.println(鼠标点击了: e.getX(), e . gety());
}
}更多爪哇岛知识请关注爪哇岛基础教程栏目。以上就是爪哇岛中事件图文详解的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。