




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA应用开发详解第18章:图形界面
——事件处理MLDN软件教学研发部本章目标了解事件的概念了解事件的监听及处理了解常用事件掌握适配器设计模式在事件监听中的应用事件和监听器每当一个按钮按下时,实际上按钮的状态就发生了改变,那么此时就会产生一个事件,而如果要想处理此事件,则就需要事件的监听者不断的监听事件的变化,并根据这些事件进行相应的处理。在Swing编程中,依然使用了最早AWT的事件处理方式,所有的事件类(基本上任意的一个组件都有对应的事件)都是EventObject类的子类EventObject类public
classEventObjectextendsObject
implementsSerializable{
publicEventObject(Objectsource){ //构造一个发生事件的对象
}
publicObjectgetSource(){ //返回一个事件对象
}
publicStringtoString(){ //得到信息
}}Java事件处理流程窗体事件WindowListener是专门处理窗体的事件监听接口,一个窗体的所有变化,例如:窗口打开、关闭等都可以使用这个接口进行监听。No.方法类型描述1voidwindowActivated(WindowEvente)普通将窗口变为活动窗口时触发2voidwindowDeactivated(WindowEvente)普通将窗口变为不活动窗口时触发3voidwindowClosed(WindowEvente)普通当窗口被关闭时触发4voidwindowClosing(WindowEvente)普通当窗口正在关闭时触发5voidwindowIconified(WindowEvente)普通窗口最小化时触发6voidwindowDeiconified(WindowEvente)普通窗口从最小化恢复到正常状态时触发7voidwindowOpened(WindowEvente)普通窗口打开时触发实现WindowListenerpublic
classMyWindowEventHandleimplementsWindowListener{//实现窗口监听
public
voidwindowActivated(WindowEventarg0){ //设置为活动窗口时触发
System.out.println("windowActivated-->窗口被选中。"); }
public
voidwindowClosed(WindowEventarg0){ //窗口被关闭窗口时触发
System.out.println("windowClosed-->窗口被关闭。"); }
public
voidwindowClosing(WindowEventarg0){ //窗口关闭时触发,按下关闭按钮
System.out.println("windowClosing-->窗口关闭。"); System.exit(1); //系统退出
}
public
voidwindowDeactivated(WindowEventarg0){ //设置为非活动窗口时触发
System.out.println("windowDeactivated-->取消窗口选中。"); }
public
voidwindowDeiconified(WindowEventarg0){ //窗口从最小化还原时触发
System.out.println("windowDeiconified-->窗口从最小化恢复。"); }
public
voidwindowIconified(WindowEventarg0){ //窗口最小化时触发
System.out.println("windowIconified-->窗口最小化。"); }
public
voidwindowOpened(WindowEventarg0){ //窗口打开时触发
System.out.println("windowOpened-->窗口被打开。"); }}在窗体上注册事件监听器packageorg.lxh.demo18.windoweventdemo;importjava.awt.Color;importjavax.swing.JFrame;public
classMyWindowEventJFrame01{
public
static
voidmain(String[]args){ JFrameframe=newJFrame("WelcomeToMLDN"); //实例化窗体对象
//将此窗体加入一个窗口事件监听器之中,这样监听器就可以根据事件进行处理
frame.addWindowListener(newMyWindowEventHandle()); frame.setSize(300,160); //设置组件大小
frame.setBackground(Color.WHITE); //设置窗体的背景颜色
frame.setLocation(300,200); //设置窗体的显示位置
frame.setVisible(true); //让组件显示
}}监听适配器在整个事件处理中提供了很多的Adapter(适配器)类,方便用户进行事件处理的实现,以WindowAdapter为例,用户只要继承了此类,就可以根据自己的需要覆写方法,如果现在只需要关心窗口关闭方法,则只在子类中覆写windowClosing()方法即可。通过WindowAdapter实现监听packageorg.lxh.demo18.windoweventdemo;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;public
classMyWindowAdapterEventHandle
extendsWindowAdapter{ //实现适配器类
//此时,可以根据自己的需要覆写方法,此类只覆写windowClosing()方法
public
voidwindowClosing(WindowEventarg0){ //窗口关闭时触发,按下关闭按钮
System.out.println("windowClosing-->窗口关闭。"); System.exit(1); //系统退出
}}使用匿名内部类packageorg.lxh.demo18.windoweventdemo;importjava.awt.Color;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjavax.swing.JFrame;public
classMyWindowEventJFrame03{
public
static
voidmain(String[]args){ JFrameframe=newJFrame("WelcomeToMLDN"); //实例化窗体对象
//此时直接使用WindowAdapter的子类完成监听的处理
frame.addWindowListener(newWindowAdapter(){ //覆写窗口关闭的方法
public
voidwindowClosing(WindowEventarg0){ System.exit(1); //系统退出
} }); frame.setSize(300,160); //设置组件大小
frame.setBackground(Color.WHITE); //设置窗体的背景颜色
frame.setLocation(300,200); //设置窗体的显示位置
frame.setVisible(true); //让组件显示
}}动作事件及监听处理一个按钮要想让其变得有意义,就必须使用事件处理,在Swing的事件处理中,可以使用ActionListener接口处理按钮的动作事件,ActionListener接口只定义了一个方法。No.方法类型描述1voidactionPerformed(ActionEvente)普通发生操作时调用使用ActionListener监听classActionHandle{
privateJFrameframe=newJFrame("WelcomeToMLDN"); //声明一个窗体对象
privateJButtonbut=newJButton("显示"); //声明一个按钮
privateJLabellab=newJLabel(); //声明一个标签
privateJTextFieldtext=newJTextField(10); //定义一个文本域
privateJPanelpan=newJPanel(); //定义一个面板
publicActionHandle(){ Fontfnt=newFont("Serief",Font.ITALIC+Font.BOLD,28);
lab.setFont(fnt); //设置标签的显示字体
lab.setText("等待用户输入信息!"); //设置默认显示文字
but.addActionListener(newActionListener(){ //采用匿名内部类
public
voidactionPerformed(ActionEventarg0){
if(arg0.getSource()==but){//判断触发源是否是按钮
lab.setText(text.getText()); //将文本文字设置到标签
} } }); //此处加入动作监听
frame.addWindowListener(newWindowAdapter(){ //加入窗口监听,覆写窗口关闭的方法
public
voidwindowClosing(WindowEventarg0){ System.exit(1); //系统退出
} });
。。。
}}改进登陆程序如果用户输入的用户名为:“lixinghua”,密码为“mldn”,则认为是合法用户,提示登陆成功的信息,反之则提示登陆失败的信息,操作代码如下所示。键盘事件及监听处理在Swing的事件处理中也可以对键盘的操作进行监听,直接使用KeyListener接口即可。此接口定义了如下的方法。如果要想取得键盘键入的内容,则可以通过KeyEvent取得,此类的常用方法如下所示。No.方法类型描述1voidkeyTyped(KeyEvente)普通键入某个键时调用2voidkeyPressed(KeyEvente)普通键盘按下时调用3voidkeyReleased(KeyEvente)普通键盘松开时调用No.方法类型描述1publicchargetKeyChar()普通返回键入的字符,只针对于keyTyped有意义2publicintgetKeyCode()普通返回键入字符的键码3publicstaticStringgetKeyText(intkeyCode)普通返回此键的信息,如:“HOME”、“F1”或“A”等实现键盘监听classMyKeyHandleextendsJFrameimplementsKeyListener{
privateJTextAreatext=newJTextArea();
publicMyKeyHandle(){
super.setTitle("WelcomeToMLDN"); JScrollPanescr=newJScrollPane(text); //加入滚动条
scr.setBounds(5,5,300,200);
super.add(scr); //在窗体加入组件
text.addKeyListener(this); //加入key监听
super.setSize(310,210); //设置窗体大小
super.setVisible(true); //显示窗体
super.addWindowListener(newWindowAdapter(){ //加入事件监听,覆写窗口关闭方法
public
voidwindowClosing(WindowEventarg0){ System.exit(1); //系统退出
} }); }
public
voidkeyPressed(KeyEvente){ //键盘按下
text.append("键盘“"+KeyEvent.getKeyText(e.getKeyCode())+"”键按下\n"); }
public
voidkeyReleased(KeyEvente){ //键盘松开
text.append("键盘“"+KeyEvent.getKeyText(e.getKeyCode())+"”键松开\n"); }
public
voidkeyTyped(KeyEvente){ //键入内容
text.append("输入的内容是:"+e.getKeyChar()+"\n"); }}使用KeyAdapteclassMyKeyHandleextendsJFrame{ //此类定义时直接继承了JFrame类
privateJTextAreatext=newJTextArea();
publicMyKeyHandle(){
super.setTitle("WelcomeToMLDN"); JScrollPanescr=newJScrollPane(text); //加入滚动条
scr.setBounds(5,5,300,200);
super.add(scr); //在窗体加入组件
text.addKeyListener(newKeyAdapter(){
public
voidkeyTyped(KeyEvente){ //键入内容
text.append("输入的内容是:"+e.getKeyChar()+"\n"); } }); //加入key监听
super.setSize(310,210); //设置窗体大小
super.setVisible(true); //显示窗体
super.addWindowListener(newWindowAdapter(){//加入事件监听
//覆写窗口关闭方法
public
voidwindowClosing(WindowEventarg0){ System.exit(1); //系统退出
} }); }}鼠标事件及监听处理如果想对一个鼠标的操作进行监听,例如,鼠标按下、松开等,则可以实现MouseListener接口No.方法类型描述1voidmouseClicked(MouseEvente)普通鼠标单击时调用(按下并释放)2voidmousePressed(MouseEvente)普通鼠标按下时调用3voidmouseReleased(MouseEvente)普通鼠标松开时调用4voidmouseEntered(MouseEvente)普通鼠标进入到组件时调用5voidmouseExited(MouseEvente)普通鼠标离开组件时调用MouseEvent在每个事件触发后都会产生MouseEvent事件,此事件可以得到鼠标的相关操作No.方法及常量类型描述1publicstaticfinalintBUTTON1常量表示鼠标左键的常量2publicstaticfinalintBUTTON2常量表示鼠标滚轴的常量3publicstaticfinalintBUTTON3常量表示鼠标右键的常量4publicintgetButton()普通以数字形式返回按下的鼠标键5publicintgetClickCount()普通返回鼠标的单击次数6publicstaticStringgetMouseModifiersText(intmodifiers)普通以字符串形式返回鼠标按下的键信息7publicintgetX()普通返回鼠标操作的X坐标8publicintgetY()普通返回鼠标操作的Y坐标实现鼠标监听classMyMouseHandleextendsJFrameimplementsMouseListener{
privateJTextAreatext=newJTextArea();
publicMyMouseHandle(){
...
//在窗体加入组件
text.addMouseListener(this); //加入mouse监听
... }
public
voidmouseClicked(MouseEvente){ //鼠标单击事件
intc=e.getButton(); //得到按下的鼠标键
StringmouseInfo=null;
if(c==MouseEvent.BUTTON1){ mouseInfo="左键"; }else
if(c==MouseEvent.BUTTON3){ mouseInfo="右键"; }else{ mouseInfo="滚轴"; }text.append("鼠标单击:"+mouseInfo+"。\n"); }
public
voidmouseEntered(MouseEvente){ //鼠标进入组件
text.append("鼠标进入组件。\n"); }
public
voidmouseExited(MouseEvente){ //鼠标退出组件
text.append("鼠标离开组件。\n"); }
public
voidmousePressed(MouseEvente){ //鼠标按下
text.append("鼠标按下。\n"); }
public
voidmouseReleased(MouseEvente){ //鼠标松开
text.append("鼠标松开。\n"); }通过MouseAdapter实现对指定鼠标操作监听classMyMouseHandleextendsJFrame{ //此类定义时直接继承了JFrame类
privateJTextAreatext=newJTextArea();
publicMyMouseHandle(){
super.setTitle("WelcomeToMLDN"); JScrollPanescr=newJScrollPane(text); //加入滚动条
scr.setBounds(5,5,300,200);
super.add(scr); //在窗体加入组件
text.addMouseListener(newMouseAdapter(){
public
voidmouseClicked(MouseEvente){//鼠标单击事件
intc=e.getButton(); //得到按下的鼠标键
StringmouseInfo=null;
if(c==MouseEvent.BUTTON1){ mouseInfo="左键"; }else
if(c==MouseEvent.BUTTON3){ mouseInfo="右键"; }else{ mouseInfo="滚轴"; }
text.append("鼠标单击:"+mouseInfo+"。\n"); }}); //加入mouse监听
... }}鼠标拖拽事件及监听处理在一般的图形界面中经常可以看到鼠标拖拽操作的情况,在Swing的事件处理中可以使用MouseMotionListener接口可以完成鼠标的拖拽操作No.方法类型描述1voidmouseDragged(MouseEvent
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 供水水源防护管理制度
- 供热企业节能管理制度
- 供热公司舆情管理制度
- 供电公司SF6气瓶管理制度
- 供电公司油库管理制度
- 供餐流程客舱管理制度
- 促销活动安全管理制度
- 保健食品采购管理制度
- 保安公司加班管理制度
- 保安指导车辆管理制度
- 好书推荐-《三毛流浪记》77955课件
- 变更户主情况登记表(填写样式)
- (新版)供电可靠性(初级)理论普考题库及答案汇总-下(判断题)
- 事业单位工勤人员技师考试职业道德复习试题
- 职业安全健康现场检查记录表参考范本
- GA∕T 1699-2019 法庭科学 复制笔迹检验指南
- 杭电 通信电路复习
- 初物管理办法及规定
- 对照品管理SOP双语
- 积雪草提取物对胃粘膜的保护作用及其机制探讨
- STEP7下冗余IO编程
评论
0/150
提交评论