第三部分应用程序设计图形界面事件处理_第1页
第三部分应用程序设计图形界面事件处理_第2页
第三部分应用程序设计图形界面事件处理_第3页
第三部分应用程序设计图形界面事件处理_第4页
第三部分应用程序设计图形界面事件处理_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论