2014/5/14第七章JavaGUI设计与事件处理-2︳Java程序设计vcclab@qq.com设计与事件处理回顾-Java的GUI设计在设计和实现图形用户界面的过程中,主要完成两个任务:创建窗口并在窗口中添加各种组件,指定组件的属性和它们在窗口中的位置,从而构成图形界面的外观效果定义图形界面的事件和各种组件对不同事件的响应,从而实现图形界面与用户的交互HefeiUniversityofTechnology,SchoolofComputerandInformationPage3/29Chapter7JavaGUI设计与事件处理回顾-Java的GUI设计一般可按照下列流程进行1.引入Java图形组件包AWT、Swing2.选择“外观和感觉”3.设置窗体属性4.设置组件布局5.向窗体中添加组件6.对组件进行事件处理HefeiUniversityofTechnology,SchoolofComputerandInformationPage4/29Chapter7JavaGUI设计与事件处理回顾–实现GUI步骤示意TeeiFtxld确定内容面板:Panel类对象下拉菜单:Menu类对象文本框:TextField类对象按钮:Button类对象窗体:Frame类对象“交互”的实现?如何判断“按钮”变化?如何实现按下以后的工作HefeiUniversityofTechnology,SchoolofComputerandInformationPage5/29Chapter7JavaGUI设计与事件处理目录人机交互处理方式1Java事件处理的机制23Java事件处理的实现HefeiUniversityofTechnology,SchoolofComputerandInformationPage6/29Chapter7JavaGUI设计与事件处理交互处理方式分析处理“人-机”交互的两种方式1.查询处理方式C等传统语言的方式主要用于Dos等命令行环境下程序设计2.事件处理机制Java、VisualC++的方式主要用于Windows程序和多线程程序设计两种处理方式进行比较的内容如何“查询”软件设计人员的需要完成的工作HefeiUniversityofTechnology,SchoolofComputerandInformationPage7/29Chapter7JavaGUI设计与事件处理两种方式比较-如何“查询”看护小宝宝“换尿布”的方式传统方法:每过一会就摸摸...如果尿布湿了,换新的新方法:尿布自动报警器(湿敏电阻)比较工作方式:由“监测-处理”变为“提醒告知”新方法优点:提高并发度、效率新方法缺点:提高了复杂度(价格...)程序设计的思路:查询-报告HefeiUniversityofTechnology,SchoolofComputerandInformationPage8/29Chapter7JavaGUI设计与事件处理While(true)do{/*查询鼠标操作*/}两种方式比较-“程序员的工作”“查询”方式下软件设计者要完成的工作?例.如何处理鼠标的多种操作if(用户单击了鼠标左键)Then{进行方式一处理}elseif(用户单击了鼠标右键)Then{进行方式二处理}elseif(用户双击了鼠标左键)Then{进行方式三处理}else...实现方式“查询”对操作类型逐个比较设计工作判断发生交互种类设计“处理”代码“交互”和”处理”代码的组织方式缺点需编程判断交互类型“交互”和”处理“的代码交织在一起HefeiUniversityofTechnology,SchoolofComputerandInformationPage9/29Chapter7JavaGUI设计与事件处理两种方式比较-“程序员的工作”续事件处理机制Java、VisualC++的方式,应对①多道程序系统:程序执行效率②图形化界面程序设计:大量复杂交互由程序运行环境检测“事件”发生与否由程序运行环境自动调用相应的事件处理代码软件设计者只要关心:①会发生哪些“交互事件”②如何处理“交互事件”※优点:多道程序时,系统执行效率提高Java虚拟机全权处理,程序员只需专注功能设计对复杂程序(复杂交互)的处理便利、结构清晰高效率HefeiUniversityofTechnology,SchoolofComputerandInformationPage10/29Chapter7JavaGUI设计与事件处理目录人机交互处理方式1Java事件处理的机制23Java事件处理的实现HefeiUniversityofTechnology,SchoolofComputerandInformationPage11/29Chapter7JavaGUI设计与事件处理事件源事件事件监听器监听器接口监听器注册2.1事件机制的几个概念事件事件源产生的交互内容,如“按下鼠标”(ActionEvent)在java.awt.event包中定义的类事件监听器接收事件并进行处理,由程序员编写(ActionListener)对应处理所监听事件源产生的事件监听器接口编写“事件监听器”的“规定”–“抽象方法”必须在监听器类中实现这些方法完成事件处理监听器注册将事件监听器对象绑定到事件源,进行监听事件源描述人机交互中事件的来源(EventSource)通常是Java图形包中组件事件源事件事件监听器监听器接口监听器注册HefeiUniversityofTechnology,SchoolofComputerandInformationPage12/29Chapter7JavaGUI设计与事件处理事件处理过程classButtonListenerimplementsActionListener{publicvoidactionPerformed(){/**按钮事件所进行的具体工作**/}}ActionEvente监听器事件源事件对象监听器接口监听器注册HefeiUniversityofTechnology,SchoolofComputerandInformationPage13/29Chapter7JavaGUI设计与事件处理2.2常用事件类事件类型典型触发动作ActionEvent按钮、列表双击、单击菜单项目KeyEvent键盘的输入MouseEvent鼠标拖动、移动、单击、按下、释放或者进入、退出组件的事件ComponentEvent组件被隐藏、移动、尺寸调整或变为不可见的事件FocusEvent组件获得或失去焦点的事件InputEvent复选框和列表项单击、控件的选择和可选菜单项的选择事件TextEvent文本区域或者文本区域的值的改动WindowEvent窗口激活、失去活动窗口、最小化、最小化、打开、关闭或者退出的事件HefeiUniversityofTechnology,SchoolofComputerandInformationPage14/29Chapter7JavaGUI设计与事件处理事件类的继承层次关系EventObjectAWTEventComponentEventItemEventActionEventAdjustmentEventTextEventComponentEventActionEventInputEventPaintEventContainerEventFocusEventWindowEventMouseEventKeyEvent“事件”的编程实现:基于Java封装的系统类HefeiUniversityofTechnology,SchoolofComputerandInformationPage15/29Chapter7JavaGUI设计与事件处理2.3事件监听器“实现了某种类型的监听器接口”的类的对象※如何编程实现监听器?1.每一个事件类都有唯一的事件处理方法接口,例如,对于处理鼠标事件“MouseEvent”类的对应接口为“MouseListener”2.每一个接口中都已经规定了一个空的抽象方法在该方法中编码实现自己想做的的工作医生专业训练掌握医疗技术普通人监听器类实现指定接口指定抽象方法自编类HefeiUniversityofTechnology,SchoolofComputerandInformationPage16/29Chapter7JavaGUI设计与事件处理2.3常用事件监听器类事件类型典型动作ActionListener处理按钮、列表双击、单击菜单项目KeyListener处理键盘的输入MouseListener处理鼠标拖动、移动、单击、按下、释放或者进入、退出组件的事件ComponetListener处理组件被隐藏、移动、尺寸调整或者变为不可见的事件FocusListener处理组件获得或失去焦点的事件TextListener处理文本区域或者文本区域的值的改动WindowListener处理窗口激活、失去活动窗口、最小化、最小化、打开、关闭或者退出的事件HefeiUniversityofTechnology,SchoolofComputerandInformationPage17/29Chapter7JavaGUI设计与事件处理事件监听器的设计实现“实现了某种类型的监听器接口”的类的对象※如何编程实现监听器?1.每一个事件类都有唯一的事件处理方法接口,例如,对于处理鼠标事件“MouseEvent”类的对应接口为“MouseListener”2.每一个接口中都已经规定了一个空的抽象方法在该方法中编码实现自己想做的的工作医生专业训练掌握医疗技术普通人监听器类实现指定接口指定抽象方法自编类HefeiUniversityofTechnology,SchoolofComputerandInformationPage18/29Chapter7JavaGUI设计与事件处理“事件源-监听器-抽象方法”对应事件类型监听器名称抽象方法(必须实现)ActionEventActionListeneractionPerformed(ActionEvent)KeyEvent(键盘事件)KeyListener(键盘监听器)按下释放按+放MouseEvent(鼠标事件)MouseMotionListener(鼠标移动监听器)移动拖动MouseListener(鼠标按键监听器)按下释放进入退出.........keyPressed(keyEvent)keyReleased(keyEvent)keyTyped(keyEvent)mouseMoved(MouseEvent)mouseDragged(MouseEvent)mousePressed(mouseEvent)mouseReleased(mouseEvent)mouseEntered(mouseEvent)mouseExited(mouseEvent)HefeiUniversityofTechnology,SchoolofComputerandInformationPage19/29Chapter7JavaGUI设计与事件处理单事件源的“多个事件”学习困难生活困难生病了讲解开导帮助“噗!”“哎呦...”1.学生可发生多种事件2.教师、辅导员、医生的共同点:都受过“专业培训”HefeiUniversityofTechnology,SchoolofComputerandInformationPage20/29Chapter7JavaGUI设计与事件处理事件监听器.续※如何将监听器绑定到组件?每个组件都提供了用于绑定监听器的方法通过观察“addxxxListener”方法的名称,可以很容易地知道其能够处理的事件类型绑定“binding”H