您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > java程序设计教程 第11章-图形用户界面
第11章图形用户界面本章学习目标了解图形用户界面的历史及其设计原则。掌握AWT组件集中的各类组件。理解AWT事件处理机制。学会编写常见事件处理程序。了解Swing组件集及其简单编程。概述图形用户界面,英文全称为GraphicalUserInterface,一般习惯简称为GUI。图形化用户界面大大方便了人机交互,是一种结合计算机科学、美学、心理学、行为学,及各商业领域需求分析的人机系统工程,强调人—机—环境三者作为一个系统进行总体设计。设计原则用户至上的原则交互界面要友好配色方案要合理主流开发工具集基于Java的图形用户界面开发工具(即组件集)最主流的有三种:AWTSwingSWT/JFace随Sun的JDK一起发布源于IBM的Eclipse开源项目AWT组件集AWT由JDK的java.awt包提供,里面包含了许多可以用来建立图形用户界面(GUI)的类,一般称这些类为组件(component)ComponentCheckboxPanelTextComponentCanvasButtonContainerTextFieldAppletDialogFrameWindowChoiceScrollbarListLabelTextArea图11-1AWT组件的继承关系图AWT组件集AWT组件大致可以分为以下三类:(1)容器类组件(2)布局类组件(3)普通组件类容器类组件容器类组件由Container类派生而来,常用的有Frame类和Dialog类,以及Panel类型的Applet类。这些容器类组件可以用来容纳其他普通组件或者甚至是容器组件自身,起到组织用户界面的作用。容器类组件有一定的范围和位置,并且它们的布局从整体上也决定了所容纳组件的位置因此,在界面设计的初始阶段,首要考虑的就是容器类组件的布局。布局组件类布局类组件是非可视组件,它们能很好地在容器中布置其他可视组件。AWT提供了五种基本的布局方式:FlowLayout、BorderLayout、GridLayout、GridBagLayout和CardLayout等,它们均为Object类的子类,如下图11-2所示。图11-2布局方式FlowLayoutCardLayoutGridLayoutBorderLayoutObjectGridBagLayoutFlowLayoutFlowLayout是最简单的一种布局方式,被容纳的可视组件从左向右,从上至下依次排列,若一组件在本行放置不下,就自动排到下一行的开始处,该方式为Panel类和Applet类容器的默认布局方式。示例11-1源程序BorderLayoutBorderLayout布局方式的特点是:将容器划分为“东”“西”“南”“北”“中”五个区。每个区可以摆放一个组件,因此最多可以在BorderLayout的容器组件中放置五个子组件。Frame或Dialog容器类组件的默认布局方式。示例11-3源程序GridLayoutGridLayout布局将容器划分为行和列的网格,每个网格单元可以放置一个组件,组件通过add()方法从上到下,从左至右顺序加入网格各个单元中GridLayout布局允许在组件之间设置水平和垂直间距,间距同样以像素为单位表示,如下为创建6行6列,水平间隔和垂直间隔均为10个像素的GridLayout布局对象:setLayout(newGridLayout(6,6,10,10));示例11-4源程序图11-10GridLayout布局界面GridBagLayoutGridBagLayout是所有AWT布局管理方式中最繁的,同时也是功能最强的。GridBagLayout设置的所有行和列可以大小不同。GridBagLayout允许不同组件在容器中占据不同大小的矩形区域。GridBagLayout由一个专用的类来对布局行为进行约束,该类为GridBagConstraints,它的所有成员都是public(公有)的,要掌握如何使用GridBagLayout布局,关键在于熟悉这些约束变量,以及如何进行设置。GridBagConstraints的常用属性publicgirdx//组件所处位置的起始单元格列号publicgridy//组件所处位置的起始单元格行号publicgridheight//组件在垂直方向占据的单元格个数publicgridwidth//组件在水平方向占据的单元格个数publicdoubleweightx//容器缩放时,单元格在水平方向的缩放比例publicdoubleweighty//容器缩放时,单元格在垂直方向的缩放比例publicintanchor//当组件较小时指定其在网格中的起始位置publicintfill//当组件分布区域变大时指明是否缩放,以及如何缩放publicInsetsinsets//组件与外部分布区域边缘的间距publicintipadx//组件在水平方向的内部缩进publicintipady//组件在垂直方向的内部缩进示例11-5源程序示例11-6源程序CardLayoutCardLayout布局将组件(通常是Panel类的容器组件)象扑克牌(卡片)一样摞起来,每次只能显示其中的一张,实现分页的效果,每一页中可以有各自的界面,这样就相当于扩展了原本有限的屏幕区域。示例11-7源程序CardLayout布局组件提供了以下方法来对各张Card页面进行切换:publicvoidfirst(Containerparent)//显示第一张卡片publicvoidnext(Containerparent)//显示下一张卡片publicvoidprevious(Containerparent)//显示上一张卡片publicvoidshow(Containerparent,Stringname)//显示指定卡片publicvoidlast(Containerparent)//显示最后一张卡片Hint有些JavaIDE(如JBuilder)也提供广大编程者所熟悉的基于绝对像素坐标的XYLayout布局方式(用户在此布局方式下可以进行可视化的拖放操作)Java用户界面设计的独到之处恰恰在于其与平台无关的布局方式。一般不建议采用XYLayout布局,它不但使用起来要依赖于特定的包,还有损Java独立性,不利于程序移植,除非用户认定所编写的程序就只在某特定平台(如Windows)下进行运行。普通组件AWT提供了一系列的普通组件以构建用户图形界面,它们主要包括:标签、文本框、文本域、按钮、复选框、单选框、列表框、下拉框、滚动条和菜单等标签标签是很简单的一种组件,一般用来显示标识性的文本信息,常被放置于其他组件的旁边起提示作用。AWT提供的标签类为Label,因此,可以通过创建Label对象来使用标签。例11-9源程序文本框文本框是图形界面中常用于接收用户输入或程序输出的一种组件,它只允许输入或显示单行的文本信息,且用户还可以限定文本框的宽度。AWT提供的文本框类为TextField,它直接继承于TextComponent,而TextComponent则从Component类继承而来。关于TextField类的常用方法有:publicStringgetText()//获取文本框中的输入文本publicStringgetSelectedText()//获取文本框中选中的文本publicbooleanisEditable()//返回文本框是否可输入publicvoidsetEditable(booleanb)//设置文本框的状态:可输入或不可输入publicintgetColumns()//获取文本框的宽度publicvoidsetColumns(intcolumns)//设置文本框的宽度publicvoidsetText(Stringt)//设置文本框中的文本为t【例11-10】文本域文本域组件也是用来接收用户输入或程序输出的,不过与文本框不同的是,它允许进行多行输入或输出,因而它一般用于处理大量文本的情形。AWT提供的文本域组件为TextArea类,它也是从TextComponent类继承而来。【例11-11】按钮AWT提供的按钮类为Button,它是从Component类直接继承而来。复选框复选框组件也是图形界面上用于接受用户输入的一种快捷方式,一般是在界面上提供多个复选框选项,用户根据实际情况,可以多选也可以都不选。AWT提供的复选框类为Checkbox。事实上,该组件类类似于具有开关选项的按钮,用户单击选中,再单击则取消选中。【例11-12】单选框在有些情况,程序界面可能给用户提供多个选项,但是只允许用户选中其中一个,这就是单选框的概念。事实上,单选框是从上面复选框衍生而来的,它也采用Checkbox作为其组件类,不过为了实现单选效果,还需要另外一个组件类:CheckboxGroup,当我们把Checkbox类对象添加进某个CheckboxGroup对象后,它就成为了单选框。【例11-13】列表框列表框组件看起来像文本域,可以有多行,每一行文本代表一个选项,文本域组件多用于用户编辑之用,而列表框多用于给用户几个选项进行选择,可以多选也可以单选。AWT提供的列表框类为List,它直接继承于Component类,【例11-14】下拉框下拉框组件提供一些选项供用户来选择,每次只能选一个,选中的选项会被单独显示出来,而改变选项则可以通过单击组件边上的箭头,再从下拉框中进行选择来完成。下拉框相比列表框而言,占据较小的界面区域。AWT提供的下拉框类为Choice,它直接继承于Component类,【例11-15】滚动条滚动条是图形用户界面中常见的组件之一,它既可以用作取值器,也可以用来滚动显示某些较长文本信息。AWT提供的滚动条类为Scrollbar,它也是直接从Component组件继承而来,【例11-16】菜单菜单将系统的各种功能选项以直观的方式展现出来,供用户选择,大大方便了用户与系统间的交互。菜单相比其他组件类特殊,它是由几个菜单相关类共同构成的菜单系统。AWT提供的菜单系统类包括:MenuBar、MenuItem、Menu、CheckboxMenuItem以及PopupMenu,它们之间的继承关系如下图所示:MenuItemMenuMenuComponentMenuBarObjectCheckboxMenuItemPopupMenuMenuBar类对应菜单系统的整体,Menu类对应菜单系统中的一列菜单(实际上它只是一种特殊的菜单项),MenuItem和CheckboxMenuItem类则对应具体的菜单项,其中CheckboxMenuItem为带复选框的菜单项,而PopupMenu类对应弹出式菜单,它是菜单Menu类的子类。注意由于各个类间存在继承关系,因而子类可以调用父类提供的部分常用方法。菜单系统创建好后,最后必须调用Frame类的setMenuBar()方法将其加入到框架界面中。【例11-17】事件处理在早先的JDK1.0版本中提供的是称为层次事件模型的事件处理机制。在JDK1.1以后版本中便被基于事件监听模型的事件处理机制替代了,这种机制也称之为事件派遣机制或授权事件机制,它的处理效率相比层次事件模型大为提高。监听器事件类组件注册:AddXxxListener(监听器队象)XxxEventXxxListener实现方法执行事件源事件类及其对应的监听器AWT提供了很多的事件类及其对应的监听器(其实就是接口),它们都被放置到JDK的java.awt.event包中。ActionEvent类表示一个广义的行为事件,可以是鼠标单击按钮或者菜单,也可以是列表框的某选项被双击或文本框中的回车行为。ActionEvent类对应的监听器为ActionListener接口,该接口只有一个抽象方法:publ
本文标题:java程序设计教程 第11章-图形用户界面
链接地址:https://www.777doc.com/doc-6446407 .html