




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章GUI交互功能设计—事件处理Java程序通过对用户操作的响应实现与用户的交互,主要工作就是对由于用户操作触发的GUI事件进行处理。3.1事件处理的概念及委托事件处理模型3.2事件处理的设计3.3常用事件监听器3.4使用SwingWorker3.1事件处理的概念及委托事件处理模型事件处理的概念事件:发送给GUI系统的消息,该消息通知GUI系统某种事情已经发生,要求作出响应。事件源:引发产生事件的组件对象。事件处理:JavaGUI系统对用户在组件上的某些操作(即发生的事件)执行特定方法或运行特定程序,从而使用户与JavaGUI应用程序进行数据交换,或对程序的运行过程进行控制事件类型根据来源事件可分为以下几种:1计算机输入输出设备产生的中断事件,如鼠标和键盘与GUI系统的交互操作。这种事件是最原生的“底层”事件,一般都需要组件做进一步处理,由此触发更高抽象层次的逻辑事件。2GUI系统触发的逻辑事件。原始事件经过组件的处理后派发的高级事件,如单击jButton1产生的ActionEvente、通知界面重绘的事件等。3应用程序触发的事件。(1)通过将事件添加到系统事件队列进行派发。如main方法中调用invokeLater方法。(2)通过调用组件的派发方法(Swing中是fireEventXxx)触发。事件处理模型Java2(即JDK1.1)及之后的版本使用委托事件模型对组件上发生的事件进行监听和处理。窗口容器按钮事件监听器widgetSelected
(SelectionEvent
e){}运行时环境SelectionEvente鼠标单击委托:事件处理SwingGUI事件处理步骤(1)定义一个XxxEvent,描述GUI的Xxx事件。(2)定义一个事件处理器接口XxxListener,声明所有与该事件相关的处理方法。(3)在触发事件的组件中定义处理Xxx事件的注册方法addXxxListener和注销方法removeXxxListener。(4)编写实现事件监听器接口的类,实现具体的事件处理方法。3.2事件处理的设计事件监听器的两种实现方式1实现监听器接口例3.1在学生成绩管理系统的用户登录界面中,为“登录”按钮设计一个事件监听器,检查输入的用户名和密码是否合法,如果合法则关闭登录窗口,显示一个新窗口欢迎该用户使用该系统。否则,清除用户名和密码文本框,让用户重新输入。StdScoreManager项目的文件UserLogin.java展开initComponents()方法的代码,看到以ActionListener为父接口生成了一个匿名监听器:jButtonOK.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){jButtonOKActionPerformed(evt);}});jButtonOKActionPerformed方法代码:
Stringname=jTextFieldUserName.getText().trim();Stringpassword=newString(jPasswordFieldLogin.getPassword()).trim();intjob=jRadioButtonStd.isSelected()?0:(jRadioButtonTch.isSelected()?1:2);Useruser=newUser(jTextFieldUserName.getText().trim(),newString(jPasswordFieldLogin.getPassword()),job);if(newUsersSet().isValid(user)){ newScoreMana(user).setVisible(true); this.dispose();}else{ jTextFieldUserName.setText(""); jPasswordFieldLogin.setText("");}事件监听器的两种实现方式2从事件适配器派生SWT类库对具有两个或两个以上方法的事件监听器接口都设计了一个对应的事件适配器类,对各个方法做了空实现。SWT应用程序的事件监听器就可以从相应的事件适配器类派生,在事件监听器类中只实现需要的方法。例3.2
在学生成绩管理系统的用户登录界面中,规定用户名必须是由字母和数字组成,否则为非法用户名。给用户名文本框jTextFieldUserName设计并注册一个校验器,防止输入非法字符。分析:文本字段(JTextField)组件可以监听KeyEvent事件,在文本字段输入时发生。通过KeyEvent对象的getKeyChar方法可以获取用户击键所对应的字符。因此,可以设计KeyEvent事件的监听器,在typedText方法中监测用户输入内容,防止输入非法用户名。KeyListener就有键按下keyPressed、键释放keyReleased击键keyTyped三个方法本例通过keyTyped方法监测用户输入内容在initComponents()中自动生成代码:jTextFieldUserName.addKeyListener(newjava.awt.event.KeyAdapter(){publicvoidkeyTyped(java.awt.event.KeyEventevt){
jTextFieldUserNameKeyTyped(evt);}});privatevoidjTextFieldUserNameKeyTyped(java.awt.event.KeyEventevt){charc=evt.getKeyChar();if(!(c>='a'&&c<='z'||c>='A'&&c<='Z'||c>='0'&&c<='9')){JOptionPane.showMessageDialog(rootPane,"输入有误。输入必须是字母和数字,其它字符无效!");evt.setKeyChar('\0');}
匿名内部事件监听器类如幻灯片11和16生成的事件监听器,通过new操作符生成了一个对象,该对象所属的类实现了java.awt.event.ActionListener接口,或扩展了java.awt.event.KeyAdapter类,且该类没有命名,是一个匿名类。观察这两个匿名类的位置发现,它们都是在类UserLogin的内部定义的,且在该外部类的方法initComponents()中定义,因此它们是匿名局部内部类。代码保护及事件处理代码的复用GUI构建器创建GUI窗体及其包含的组件时,IDE会自动产生保护代码块,以灰色背景显示且代码不可修改。其中就包括事件处理器注册代码。以白色背景显示的代码可以修改,其中包括事件监听器匿名内部类体中实现的方法所调用的方法。可以通过事件处理方法的复用来实现事件处理代码的复用。NetBeansIDE中设计事件监听器的步骤及方法1.首先在Design视图或Navigator窗口选择事件源组件。如选择用户名jTextFieldUserName文本字段。2.在Properties窗口单击Events标签切换到事件选项卡页面。3.找到需要处理的事件操作,如keyTyped,单击该行右侧的“…”按钮。4.在该操作的Handlers对话框中Add事件处理方法,或者Rename选定的事件处理方法,或Delete选定的事件处理方法。5.单击该行右侧的下三角按钮,在下拉列表中选择所需编写的方法,导航到该方法的源代码段。6.编写和修改事件处理代码。用NetBeansIDE连接向导设置事件使用连接向导在一个窗体的两个组件之间设置事件而不用手工编写代码。1.单击GUI编辑器窗口中工具栏上的ConnectionMode(
)按钮。2.在Design视图的窗体上或在Navigator窗口中选择事件源组件,如文本字段jTextField1。此时,被选组件以红色加亮显示。3.选择事件影响其状态的目标组件,如jLabel1。该组件也会以红色加亮显示。4.出现ConnectionWizard。3.3常用事件监听器--鼠标事件1MouseEvent2MouseListener接口接口响应鼠标的按下、松开及双击操作所发生的MouseEvent事件。该接口有下列五个方法:(1)mouseClicked方法,在鼠标单击时执行。(2)mousePressed方法,在鼠标键按下时执行。(3)mouseReleased方法,在释放鼠标键时执行。(4)mouseEntered方法,在鼠标按钮没有按下,鼠标光标移进事件源组件时执行。(5)mouseExited方法,在鼠标按钮没有按下,在鼠标光标移出事件源组件时执行。3MouseMotionListener接口响应鼠标移动时发生的MouseEvent事件。该接口提供两个方法:(1)mouseDragged方法,鼠标键按下,同时鼠标在组件内移动时执行。(2)mouseMove方法,鼠标键没有按下,同时鼠标在组件内移动时执行。4MouseWheelListener接口目前有一些GUI程序使用鼠标滚轮操作。拨动鼠标滚轮发生MouseWheelEvent事件,通过实现了MouseWheelListener接口类的实例响应该事件。该接口有一个方法:mouseWheelMoved。例3.3为了更深入地理解鼠标事件,下面通过具体的实例演示如何响应鼠标事件。EventTest项目的book.chap3.eventsTest包中的ExMouseEvent例。事件及其监听器事件事件方法监听器监听器方法组件
ActionEventgetActionCommand,getModifiersActionListeneractionPerformedAbstractButton,JComboBox,JTextField,TimerAdjustmentEventgetAdjustable,getAdjustementType,getValueAdjustmentListeneradjustmentValueChangedJScrollbarItemEventgetItem,getItemSelectable,getStateChangeItemListeneritemStateChangeAbstractButton,JComboBoxFocusEventisTemporaryFocusListenerfocusGained,focusLostComponentKeyEventgetKeyChar,getKeyCode,getKeyModifiesText,getKeyText,isActionKeyKeyListenerkeyPressed,keyReleased,keyTypedComponentMouseEventgetClickCount,getX,getY,getPoint,translatePointMouseListenermouseClicked,mousePressed,mouseReleased,mouseEntered,mouseExitedComponentMouseMotionListenermouseDragged,mouseMovedComponentMouseWheelEventgetWheelRotation,getScrollAmountMouseWheelListenermouseWheelMovedComponentWindowEventgetWindowWindowListenerwindowOpened,windowClosing,windowClosed,windowIconified,windowDeiconified,windowActivated,windowDeactivatedWindowgetOppositeWindowWindowFocusListenerwindowGainedFocus,windowLostFocusWindowgetOldState,getNewStateWindowStateListenerwindowStateChangedWindow3.3常用事件监听器3.3常用事件监听器--键盘事件在Swing中,对KeyEvent事件通过实现KeyListener接口来响应,键被按下和松开都会触发该事件。KeyListener接口提供3个方法:(1)keyPressed方法,按下一个键时执行。(2)keyReleased方法,松开一个键时执行。(3)keyTyped方法,按下接着松开一个键时执行。2KeyEvent的成员3.3常用事件监听器--焦点事件1FocusListener接口两个方法:publicvoidfocusGained(FocusEventevt);publicvoidfocusLost(FocusEventevt);例3.4
新建一JFrame窗体,添加jButton1、jButton2和jButton3按钮及一个标签jLabel1,为每个按钮注册焦点事件,当某个按钮获得焦点时在jLabel1显示获得焦点的信息和失去焦点的按钮信息。3.3常用事件监听器--组件属性改变事件当组件属性改变时触发PropertyChangeEvent类型的事件。PropertyChangeListener接口有一个PropertyChange方法PropertyChangeEvent对象evt有三个常用方法:(1)publicObjectgetNewValue():返回组件所改变属性的新值。(2)publicObjectgetOldValue():返回组件属性改变前的旧值。(3)publicStringgetPropertyName()返回组件所改变的属性名。3.3常用事件监听器--Action事件是SwingGUI程序中最常用的语义事件。1ActionListener接口通过实现ActionListener接口响应组件动作事件。该接口有一个方法:actionPerformed。ActionEvent对象evt有三个常用的方法:(1)publicStringgetActionCommand():返回该动作事件的动作命令字符串,该字符串反映在事件源按钮的actionCommand属性中。(2)publicintgetModifiers():返回发生该事件时按下的修饰键。(3)publiclonggetWhen():返回发生该事件时的时间戳。例3.5设计一个文本字段jTextField1,当在该文本框输入内容之后按回车键时,弹出一个对话框显示文本框中的内容。DemoProjects\EventTest\src\book\chap3\eventsTest\ExActionEvent.java3.3常用事件监听器--组件专用事件监听器1.窗口事件WindowEvent在窗口打开、关闭、图标化(最小化)、恢复窗口、转入活动状态(前台)、转入非活动状态(后台)、获得焦点、失去焦点等状态改变时,都会触发窗口事件WindowEvent。有三个监听器分别处理有关操作:WindowListener、WindowFocusListener、WindowStateListener2.ItemEvent事件在点击按钮JButton、单选按钮JRadioButton、复选框JCheckBox和菜单项JMenuItem等组件,或者在列表中选择条目时,它们状态发生改变,触发ItemEvent事件。3.CaretEvent事件当文本组件中插入点的位置改变时触发CaretEvent事件。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 皮革服装设计中的文化符号运用考核试卷
- 电池制造供应链合作与创新考核试卷
- 纸浆的环保制程与优化考核试卷
- 植物油加工在医药辅料行业的应用考核试卷
- 印刷企业技术创新能力提升考核试卷
- 畜牧业养殖废弃物资源化利用产业链构建考核试卷
- 电动门安全使用教育
- 肉类产品加工企业的生产效率提升考核试卷
- 消费金融跨境业务与监管考核试卷
- 互联网+心理咨询与治疗考核试卷
- 八年级语文上册 第一单元 第3课《乡愁 余光中》教案 冀教版
- 2024中考英语必考1600词汇分类速记表
- 江苏泰州市泰兴经济开发区国有企业招聘笔试题库2024
- 2024年风力发电运维值班员(技师)技能鉴定考试题库-下(判断题)
- DL∕T 1709.3-2017 智能电网调度控制系统技术规范 第3部分:基础平台
- 考核办法和考核方案
- 化妆品生产OEM合同书
- 海上CANTITRAVEL平台桩基施工关键技术应用v7
- 有色金属冶金概论课程教案
- 华为MA5800配置及调试手册
- 中国生产安全行业市场运行动态及投资发展潜力分析报告
评论
0/150
提交评论