版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章
GUI程序设计基础
Java程序设计本章主要内容图形用户界面概述布局管理事件处理GUI设计中容器的应用小结2024/12/24李飞——计算中心2/33图形界面的基本概念组件GUI组件也叫控件,它是GUI用来定义屏幕元素的一个对象,用它可以显示信息行或允许用户以特定的方式与程序进行交互。例如标签、按钮、文本框等都是组件。
事件事件在Java中是一种对象,它代表能够引起我们注意的某些事情。通常引发事件的都是用户的动作或程序运行时系统的某些状态变化。例如用户单击鼠标引发鼠标单击事件。3.监听器监听器在Java中也是一种对象,它就像一个天眼,在被启动后监视着程序运行,等待着事件的发生。一旦发生事件,监听器会以某种方式进行响应。4.容器。容器是用来组织其他组件的组件。一般来说,一个应用程序的图形用界面首先对应一个容器,如一个窗口、一个对话框亦或是一个面板。2024/12/24李飞——东北大学秦皇岛分校计算中心3/33图形界面的基本概念窗口窗口是在图形界面的操作系统中执行应用程序时打开的一个矩形区域。菜单是GUI界面中为用户提供的在程序进行中出现在显示屏上的选项列表。它的每个选项对应一个应用程序功能。用户可以通过点选这些选项来命令程序执行相应的程序完成对应的功能。工具栏工具栏是一组带图标的按钮的集合。工具栏的每个按钮代表一个程序功能,当用户点选某一按钮时,系统会执行该按钮对应的程序,以完成相应的功能。8.对话框。对话框可以看成是一种特殊的窗口,它包含按钮和各种选项,通过它们可以完成特定命令或任务。对话框主要为用户提供一种人机交流的方式,用户对对话框进行设置,计算机就会执行相应的命令。2024/12/24李飞——东北大学秦皇岛分校计算中心4/33Java图形界面的组成2024/12/24李飞——东北大学秦皇岛分校计算中心5/50GUI相关的包和类2024/12/24李飞——东北大学秦皇岛分校计算中心6/33GUI相关的包和类2024/12/24李飞——东北大学秦皇岛分校计算中心7/338.2布局管理我们在图形用户界面程序设计中一方面要考虑程序的功能,同时还要考虑GUI的美观,这就需要在设计界面时考虑界面中各种组件在容器中的位置和相互关系。在这方面,JDK为程序员提供了布局管理器类,用于解决组件的位置和布局的问题。Java设置组件布局的方法是通过为容器设置布局管理器来实现的。特别的,如果当用户不设定布局管理器(布局管理器设为null时)的时候,Java认为用户需要把组件放到绝对坐标指定的位置,这时GUI将和平台相关,我们也称这种做法为绝对位置布局。2024/12/24李飞——东北大学秦皇岛分校计算中心8/33布局管理器FlowLayout类:对应流式布局策略,指组件按照加入顺序排成一行,一行排满后自动换行排列。BorderLayout类:对应边界布局策略,指把容器划分为东、西、南、北、中五个区域,加入组件时指定其所在区域。CardLayout类:对应卡式布局策略,指各个组件层叠安排,某一时刻只显示一个组件。GridLayout类:对应网格布局策略,是把容器划分成若干行乘若干列的网格,组件放置在指定的网格中。GridBagLayout类:对应网格包布局策略,是把容器划分为网格,但组件可以占用一个或多个网格。2024/12/24李飞——东北大学秦皇岛分校计算中心9/33流式布局流式布局是Panel类、JPanel类、Applet类和它们的子类的默认布局策略。对应的类:java.awt包中的FlowLayout类。使用方法:对一个原本不使用流式布局管理器的容器,若需要将其布局策略改变为流式布局策略,可以使用setLayout()方法。其格式是setLayout(newFlowLayout());对于使用FlowLayout的容器,加入组件使用容器的add()方法即可,这些组件将顺序的排列在容器中。2024/12/24李飞——东北大学秦皇岛分校计算中心10/33流式布局流式布局管理器对象的构造方法FlowLayout(intalign,inthgap,intvgap);或FlowLayout(intalign);其中,参数align指定每行组件的对齐方式,可以取三个静态常量LEFT、CENTER、RIGHT之一;参数hgap和vgap分别指定各组件间的横向和纵向间的间距(以像素为单位)。当仅有align参数时,组件间的纵横间距默认均为五个像素。当使用没有任何参数的构造方法时,系统默认对齐方式是居中对齐,且组件间距默认五个像素。2024/12/24李飞——东北大学秦皇岛分校计算中心11/33例8.1采用流式布局管理器创建用户界面。importjava.awt.*;importjavax.swing.*;classmyWindowextendsJFrame{ JButtonbutton1,button2,button3,button4,button5; JPanelpanel1,panel2,panel3; publicmyWindow(){ FlowLayoutfl=newFlowLayout(FlowLayout.CENTER,10,10); Containercp=this.getContentPane(); button1=newJButton("按钮1"); button2=newJButton("按钮2"); button3=newJButton("按钮3"); button4=newJButton("按钮4"); button5=newJButton("按钮5");2024/12/24李飞——东北大学秦皇岛分校计算中心12/50 panel1=newJPanel(); panel2=newJPanel(); panel3=newJPanel(); panel1.add(button1); panel1.add(button2); panel2.setLayout(fl); panel2.add(button3); panel3.add(button4); panel3.add(button5); cp.setLayout(newFlowLayout()); cp.add(panel1); cp.add(panel2); cp.add(panel3); this.setSize(200,200); this.setVisible(true); }}2024/12/24李飞——东北大学秦皇岛分校计算中心13/33publicclasseg8_1{ publicstaticvoidmain(String[]args){ myWindowwin=newmyWindow(); }}2024/12/24李飞——东北大学秦皇岛分校计算中心14/33边界布局边界布局对应的类是BorderLayout。它是把容器的空间简单的划分为East(东)、West(西)、South(南)、North(北)、Center(中)五个区域。五个区域采用类似于地图的方位,遵循上北、下南、左西、右东的划分方法。2024/12/24李飞——东北大学秦皇岛分校计算中心15/33边界布局边界布局管理器的构造方法有两个,他们分别是BorderLayout()和BorderLayout(inthgap,intvgap)BorderLayout布局是Window、Frame和Dialog类的默认布局管理器。例8.2为大家示范了边界布局管理器的使用方法。例:Eg8.22024/12/24李飞——东北大学秦皇岛分校计算中心16/33卡式布局卡式布局对应CardLayout类,设置了卡式布局的容器可以容纳多个组件,但在同一时刻只能显示其中的一个组件。2024/12/24李飞——东北大学秦皇岛分校计算中心17/33使用卡式布局的方法和步骤如下CardLayout对象的构造方法CardLayoutmyLayout=newCardLayout();使用容器的setLayout()方法为容器设置布局管理器。setLayout(myLayout);使用Add(字符串,组件)方法将该容器的每个组件添加到容器,同时为每个组件分配一个字符串的名字,以便布局管理器根据这个名字调用显示这个组件。4.使用show(容器名,字符串)方法可以按第(3)步分配的字符串名字显示相应的组件;也可按组件加入容器的顺序显示组件。2024/12/24李飞——东北大学秦皇岛分校计算中心18/33
CardLayout的常用方法方法名说明addLayoutComponent(Componentcomp,Objectconstraints)将组件添加到卡片布局的内部名称表。constraints指组件的引用名称。first(Containerparent)翻转到容器的第一张卡片。next(Containerparent)翻转到容器的下一张卡片。previous(Containerparent)翻转到容器的前一张卡片。last(Containerparent)翻转到容器的最后一张卡片。show(Containerparent,Stringname)翻转到指定name的组件。如果不存在,则不发生任何操作。2024/12/24李飞——东北大学秦皇岛分校计算中心19/33网格布局格布局的策略是把容器的空间划分成若干行和列组成的网格,组件放在网格中的每个小格中。网格布局管理器的一般步骤:创建GridLayout对象作为布局管理器。指定划分网格的行数和列数。使用容器的setLayout()方法为容器设置网格布局管理器调用容器的方法add()将组件加入容器。每个网格中必须填入一个组件,如果希望某个网格为空白,可以为它加入一个空的标签,例如add(newLabel())。例8.42024/12/24李飞——东北大学秦皇岛分校计算中心20/50网格袋布局网格袋布局与网格布局类似,也是将容器划分为若干网格。但不同的是,首先,网格袋布局中的每个网格的宽度和高度都可以不同;其次,每个组件可以占据一个和多个网格;再次,可以指定组件在网格中的停靠位置。2024/12/24李飞——东北大学秦皇岛分校计算中心21/33网格袋布局管理器使用的基本步骤通过new创建GridBagLayout类的实例对象。通过setLayout()方法为容器指定网格袋布局。为网格袋布局管理器创建约束条件对象,即创建GridBagConstraints类的实例对象。通过设置约束条件对象的属性,设置网格袋布局的约束条件。通过add(GUI组件名,约束条件对象名)方法按照约束条件将GUI组件添加到容器中。2024/12/24李飞——东北大学秦皇岛分校计算中心22/338.3事件处理事件(event):是指用户使用鼠标或键盘对窗口中的组件进行交互操作或者系统状态改变时所发生的事情,如单击按钮,向文本框中输入文字或双击鼠标等。在Java中,事件是通过类来描述,并通过事件类的实例对象来表示的。事件类用于描述发生了什么事情。2024/12/24李飞——东北大学秦皇岛分校计算中心23/33常用事件列表事件事件类名说明组件动作事件ActionEvent当用户对组件进行操作触发该事件。调整滚动条事件AdjustmentEvent各种滚动条调整时触发该事件。改变容器内容事件ContainerEvent容器内容因为添加或移除组件而更改时触发该事件。组件更改事件ComponentEvent组件被移动、大小被更改或可见性被更改时触发该事件。事件源状态改变事件ChangeEvent通知感兴趣的参与者事件源中的状态已发生更改。焦点变化事件FocusEvent当组件获得或失去焦点时触发该事件。条目变化事件ItemEvent在列表框或组合框中,某行被选定或取消选定时触发该事件。击键事件KeyEvent当按下、释放某个键时触发该事件。列表项选择事件ListSelectionEvent用户选择列表中的条目时触发该事件。鼠标操作事件MouseEvent当鼠标按下、放开、单击,双击,右击,拖拽、移动等操作。菜单操作事件MenuEvent当用户操作菜单时触发该事件弹出式菜单操作事件PopupMenuEvent当用户操作弹出式菜单时触发该事件文本变化事件TextEvent当文本改变时触发该事件窗口变化事件WindowEvent当打开、关闭、激活、停用、最小化或取消图标化窗口时,或者焦点转移到或移出窗口时触发此事件。2024/12/24李飞——东北大学秦皇岛分校计算中心24/33事件监听模型2024/12/24李飞——东北大学秦皇岛分校计算中心25/33发生事件系统发送事件发生消息事件监听器捕捉事件执行相应的事件处理程序等待新事件发生事件的监听器接口和处理方法事件类监听器接口事件处理接口的方法ActionEventActionListeneractionPerformed(ActionEvente)AdjustmentEventAdjustmentListeneradjustmentValueChanged(AdjustmentEvente)ContainerEventContainerListenercomponentAdded(ContainerEvente)componentRemoved(ContainerEvente)ChangeEventChangeListenerstateChanged(ChangeEvente)TextEventTextListenertextValueChanged(TextEvente)ItemEventItemListeneritemStateChanged(ItemEvente)ListSelectionEventListSelectionListenervalueChanged(ListSelectionEvente)ComponentEventComponentListenercomponentMoved(ComponentEvente)componentHidden(ComponentEvente)componentResized(ComponentEvente)componentShown(ComponentEvente)FocusEventFocusListenerfocusGained(FocusEvente)focusLost(FocusEvente)KeyEventKeyListenerkeyPressed(KeyEvente)keyReleased(KeyEvente)keyTyped(KeyEvente)2024/12/24李飞——东北大学秦皇岛分校计算中心26/33MenuEventMenuListenermenuCanceled(MenuEvente)
menuDeselected(MenuEvente)
menuSelected(MenuEvente)MouseEventMouseMotionListenermouseDragged(MouseEvente)
mouseMoved(MouseEvente)
MouseListenermousePressed(MouseEvente)
mouseReleased(MouseEvente)
mouseEntered(MouseEvente)
mouseExited(MouseEvente)
mouseClicked(MouseEvente)WindowEventWindowListenerwindowClosing(WindowEvente)
windowOpened(WindowEvente)
windowIconified(WindowEvente)
windowDeiconified(WindowEvente)
windowClosed(WindowEvente)
windowActivated(WindowEvente)
windowDeactivated(WindowEvente)2024/12/24李飞——东北大学秦皇岛分校计算中心27/33事件类监听器接口事件处理接口的方法事件处理机制(例8.6)2024/12/24李飞——东北大学秦皇岛分校计算中心28/33事件适配器在实现事件监听器接口的过程中,我们会发现很多时候我们仅需要对某个事件的一个动作进行处理,但由于接口继承的特性,却不得不把此事件对应的事件监听器接口中的所有事件处理方法实现,尽管有些方法并不需要,也要在形式上实现,即实现{}。这样会很麻烦。为了方便编程,Java为某些包含多个抽象方法的监听器接口提供了事件适配器类,这些事件适配器类已经形式上的实现了对应的相关事件监听器接口,这样我们编写事件监听器程序时只需继承相应的事件适配器类,并在子类中重写并覆盖我们需要的处理方法即可,而不必一一实现接口中其他无关的方法。2024/12/24李飞——东北大学秦皇岛分校计算中心29/33事件与适配器类(例8.7)事件类事件处理接口适配器类ActionEventActionListener无AdjustmentEventAdjustmentListener无ComponentEventComponentListenerComponentAdapterContainerEventContainerListenerContainerAdapterItemEventItemListener无KeyEventKeyListenerKeyAdapterMouseEventMouseListenerMouseAda
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JJF(陕) 021-2020 万用量规校准规范
- 幼儿园小班探索未来的活动计划
- 《信用证种类》课件
- 社团活动的数字化转型探索计划
- 护理部患者安全管理措施计划
- 班级自主管理的实施案例研究计划
- 少先队大队委员竞选讲义模板
- 《设备的开孔和附》课件
- 《酒店企业文化培训》课件
- 《数值试验题》课件
- 未来当兵职业生涯规划书
- 自动控制原理及应用知到智慧树章节测试课后答案2024年秋新疆工程学院
- 带状疱疹中医护理
- 生物脊椎动物(鱼)课件-2024-2025学年人教版生物七年级上册
- 光伏电站风险评估与应对措施
- 浙江省杭州市拱墅区2023-2024学年六年级(上)期末数学试卷
- 网络安全培训
- 《大学生劳动教育》课件第一章 新时代大学生的劳动价值观
- 【事业单位考试真题】《综合基础知识》必看考点《刑法》(2021年版)(附答案解析)
- 《Python程序设计》课件-1:开发环境搭建
- 第7课《谁是最可爱的人》课件-2023-2024学年统编版语文七年级下册
评论
0/150
提交评论