事件处理:

来源:互联网 发布:js object方法 编辑:程序博客网 时间:2024/05/22 03:20

事件处理:
(1)为了给图形界面能够接受用户的操作,必须给各个组件加上事件处理机制,在事件处理过程中,主要涉及三类对象:
Event Source(事件源) 事件发生的场所,通常就是各个组件,如按钮,窗口等
Event(事件)事件封装了GUI上特定的事情(通常就是一次用户操作),如果程序需要获得GUI上所发生事件的相关信息,都可以根据Event对象来获得
EventListener(事件监听器):负责监听事件源所发生的事件,并对各种事件作出相应处理

(2)由于java是面向对象的编程语言,方法不能独立存在,因此必须以类的形式组织这些方法,所以事件监听器的核心就是其包含的方法,这些方法也被称为事件处理器(Event Handler)

(3)当用户作出单击按钮等这样的操作时,这些动作就会触发相应的事件,该事件由AWT封装成相应的Event对象,该事件会触发事件源上注册的事件监听器(特殊的java对象),事件监听器调用对应的事件处理器(事件监听器里的实例方法)作出相应的相应。

import java.awt.BorderLayout;import java.awt.Button;import java.awt.Frame;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class  EventQs{     Frame f =new Frame("事件测试");     Button ok =new Button("ok");     TextField tf=new TextField(40);     public void init(){           //注册事件监听器,监听ok按钮           ok.addActionListener(new OkListener());           f.add(tf);           f.add(ok, BorderLayout.SOUTH);           f.pack();           f.setVisible(true);     }     //定义事件监听器类     class OkListener implements ActionListener{           //下面定义的方法就是事件处理器,用于相应特定的事件           public void actionPerformed(ActionEvent e) {                // TODO Auto-generated method stub                System.out.println("用户单击了ok按钮");                tf.setText("hello");           }     }     public static void main(String[] args){           new EventQs().init();     }}

(4)实现AWT事件处理机制的步骤:
a.实现事件监听器类,该监听器是一个特殊的java类,必须实现一个XxxListener接口
b.创建事件监听源,创建事件监听对象
c.调用addXxxListener()方法将事件监听器注册给普通组件,当事件源发生指定事件时,AWT会触发事件监听器,由事件监听器调用相应的方法(事件处理器)来处理事件,事件源上所发生的事件将作为参数传递给事件处理器
5)实现事件监听器是事件处理的核心。事件监听器必须实现事件监听器接口,AWT提供了大量的事件监听器接口用于实现不同类型的事件监听器,用于监听不同类型的市价 。AWT提供了丰富的事件类,用于封装不同组件上所发生的不同操作。
(6)AWT事件分为两大类:低级事件和高级事件
低级事件:
低级事件是指基于特定动作的事件,比如进入、点击、拖放等动作的鼠标事件,当组件得到焦点、失去焦点时触发的焦点事件。
ComponentEvent:组件事件,当组件尺寸发生变化、位置发生移动、显示/隐藏发生变化时触发该事件
ContainerEvent:容器事件,添加组件,删除组件时发生变化
WindowEvent:窗口事件,当窗口状态发生改变(打开 关闭 最大化 最小化)触发该事件
FocusEvent:焦点事件,当组件得到焦点或者失去焦点时触发该事件
keyEvent:键盘事件,当按键配按下,松开,单击时触发事件
MouseEvent:鼠标事件
PaintEvent:组件绘制事件

高级事件(语义事件)
高级事件是基于语义的事件,它可以不和特定的动作相关联,而依赖于触发此事件的类,例如在滑动条上滑动滑块会触发AdjuctmentEvent事件,选中项目列表中的某一项就会触发ItemEvent事件
ActionEvent:动作事件,当按钮、菜单项被单击,在TextFiled按Enter时触发该事件
AdjuctmentEvent:调节事件,在滑动条上滑动滑块调节数值时发生该事件。
ItemEvent:选项事件,当用户选中某项或者取消时触发该事件
TextEvent:文本事件,当文本框文本域的文本发生变化时触发该事件。

//下面程序示范了一个监听器监听多个组件,一个组件被多个监听器监听的效果

import java.awt.BorderLayout;import java.awt.Button;import java.awt.Frame;import java.awt.Panel;import java.awt.TextArea;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public  class MultiListener{     Frame  f =new Frame("监听器测试");     TextArea ta =new TextArea(8, 50);     Button b1 =new  Button("按钮1");     Button b2=new  Button("按钮2");     public void inti(){           //创建FirstListener实例           FirstListener f1=new FirstListener();           //给b1按钮注册两个事件监听器           b1.addActionListener(f1);           b2.addActionListener(new SecondListener());           //将f1事件监听器注册给b2按钮           b2.addActionListener(f1);           f.add(ta);           Panel p=new Panel();           p.add(b1);           p.add(b2);           f.add(p, BorderLayout.SOUTH);           f.pack();           f.setVisible(true);     }     class FirstListener implements ActionListener{           @Override           public void actionPerformed(ActionEvent e) {                // TODO Auto-generated method stub                ta.append("第一个事件监听器被触发,事件源是:"+e.getActionCommand()+"\n");           }     }     class SecondListener implements ActionListener{           @Override           public void actionPerformed(ActionEvent e) {                // TODO Auto-generated method stub                ta.append("单击了"+e.getActionCommand());           }     }     public static void main(String[] args){           new MultiListener().inti();     }}

//上面程序调用了ActionEvent的getActionCommand()方法,用于获取被单击按钮上的文本
————————————————————————————————————————————————————————————————————————————
//下面程序为窗口添加窗口监听器

import java.awt.Frame;import java.awt.TextArea;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;public class WindowListenerTest{     Frame f=new Frame("窗口监听器测试");     TextArea ta=new TextArea(8, 50);     public void init(){           //为窗口添加窗口事件监听器           f.addWindowListener(new MyListener());           f.add(ta);           f.pack();           f.setVisible(true);     }     //实现一个窗口监听器类     class MyListener implements WindowListener{           @Override           public void windowOpened(WindowEvent e) {                // TODO Auto-generated method stub                ta.append("窗口被打开\n ");           }           @Override           public void windowClosing(WindowEvent e) {                // TODO Auto-generated method stub                ta.append("窗口关闭窗口\n ");                System.exit(0);           }           @Override           public void windowClosed(WindowEvent e) {                // TODO Auto-generated method stub                ta.append("窗口被关闭 \n ");           }           @Override           public void windowIconified(WindowEvent e) {                // TODO Auto-generated method stub                ta.append("窗口被最小化 \n ");           }           @Override           public void windowDeiconified(WindowEvent e) {                // TODO Auto-generated method stub                ta.append("窗口被恢复 \n ");           }           @Override           public void windowActivated(WindowEvent e) {                // TODO Auto-generated method stub                ta.append("窗口被激活 \n ");           }           @Override           public void windowDeactivated(WindowEvent e) {                // TODO Auto-generated method stub          ta.append("窗口失去焦点 \n ");           }     }}
0 0
原创粉丝点击