第5章图形用户界面设计.ppt
第5章图形用户界面设计 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望v教学目标:v通过本章的学习,掌握常用容器组件的用法、容器组件的布局方式、组成界面的可视组件的功能与用法;掌握事件处理机制,能进行菜单设计,最终达到开发出智能化的图形界面应用程序的目的。v案例学生信息注册界面设计解析v多数学校的学生档案信息都由计算机进行管理,在编写的档案管理应用程序中,有档案信息录入模块,该模块的功能是在图形化的界面下,用户把信息输入到计算机中。录入界面的大致样式及组件名称如图v设计上述程序界面并实现相应的功能,程序框架如下:vpublicclassInputDataimplementsActionListenervvFramef;/声明框架对象vLabell1,l2,l3,l4;/声明标签对象vTextFieldt;/声明文本行对象vCheckboxr1,r2;/声明单选按钮对象vCheckboxGroupg;/声明组对象vCheckboxc1,c2,c3;vChoicech;/声明选择框对象vButtonb;/声明按钮对象vTextAreata;/声明文本区对象vPanelp1,p2,p3,p4,p5;/声明面板对象vinti=0;vvpublicInputData()vv对象实例化;vch.add(济南);/添加选择项vp1=newPanel();vp1.setLayout(newFlowLayout(FlowLayout.LEFT);/设定面板布局样式vp1.add(l1);/在面板中加入组件vf.setLayout(newGridLayout(2,1);/设定框架布局样式vf.addWindowListener(newWindowAdapter()/注册事件监听器,匿名类实现接口vpublicvoidwindowClosing(WindowEvente)vSystem.exit(0););vf.setVisible(true);vvvpublicvoidactionPerformed(ActionEvente)/事件处理接口实现vv/把输入内容显示到文本区中;vvpublicstaticvoidmain(Stringargs)vvnewInputData();vvv在上面的案例框架中,应用到了如下知识点。v(1)组成界面的各种组件。v(2)界面的布局样式。v(3)事件处理机制。v下面将详细介绍相关的知识。5.1框架与面板v5.1.1认识Component类v部分类的继承关系如图vComponent类是其他组件类的父类,在此介绍该类的一些方法,这些方法可直接继承到子类中使用。v(1)setFont(Fontf):设置组件的字体。v(2)setForeground(Colorr):设置组件的前景色。v(3)setLocation(intx,inty):设置组件的显示位置。v(4)setSize(intwidth,intheight):调整组件的大小,使其宽度为width,高度为height。v(5)setVisible(booleanb):根据参数b的值显示或隐藏此组件。v(6)getForeground():获得组件的前景色。v(7)getFont():获得组件的字体。v(8)getBackground():获得组件的背景色。v(9)getHeight():返回组件的当前高度。v(10)invalidate():使此组件无效。v(11)getBounds():以Rectangle对象的形式获得组件的边界。v5.1.2框架v框架类Frame是一种带标题条并且可以改变大小的窗口,该类为容器类。Frame类的构造方法及实例方法:类别方 法 定 义功 能构造方法public Frame()创建一个不带标题信息的框架public Frame(String title)创建一个标题信息是title的框架实例方法public void add(Component comp)在框架中添加组件comppublic void setLayout(LayoutManager mgr)设置布局方式public void setTitle(String title)设置框架的标题public String getTitle(String title)获取框架的标题v5.1.3面板v面板类Panel也是容器类。但与Frame类的区别是,面板是一种没有标题条的容器,在应用时只能把该类实例化的对象通过Container类的add方法加载到Window对象中。v该类的构造方法如下。v(1)publicPanel():创建一个面板对象。v(2)publicPanel(LayoutManagermgr):创建一个面板对象且约定了添加到该面板中组件的布局样式。5.2布局管理器v5.2.1边界布局v该布局将容器组件划分成了5个区域:南(South)、北(North)、东(East)、西(West)、中(Center)。v边界布局类边界布局类v边界布局类为BorderLayout,该类的构造方法如下。v(1)publicBorderLayout():创建一个边界布局管理类对象。v(2)publicBorderLayout(inthgap,intvgap):创建一个边界布局管理类对象。其中,hgap和vgap指定组件的水平和垂直间距,单位是像素,默认值为0。v若向容器中加入组件,可以通过以下两种形式实现。v(1)add(Strings,Componentcomp):其中s代表位置,位置用字符串“South”、“North”、“East”、“West”、“Center”表示。v(2)add(Componentcomp,intx):其中x是代表位置的常量值,分别是BorderLayout.SOUTH、BorderLayout.NORTH、BorderLayout.EAST、BorderLayout.WEST、BorderLayout.CENTER。v说明:(1)在边界布局中,若向框架加入组件,如果不指定位置,则默认把组件加到了“中”的区域。v(2)若某个位置未被使用,则该位置将被其他组件占用。v5.2.2流布局v该布局按从左至右、从上至下的方式将组件加入到容器中。v流布局类流布局类v流布局类为FlowLayout,该类的构造方法如下。v(1)publicFlowLayout():创建一个流布局类对象。(2)publicFlowLayout(intalign):创建一个流布局类对象,其中align表示对齐方式,其值有3个,为FlowLayout.LEFT、FlowLayout.RIGHT、FlowLayout.CENTER,默认为FlowLayout.CENTER。v(3)publicFlowLayout(intalign,inthgap,intvgap):其中align表示对齐方式;hgap和vgap指定组件的水平和垂直间距,单位是像素,默认值为5。v5.2.3网格布局v该布局将容器划分成规则的行列网格样式,组件逐行加入到网格中,每个组件大小一致。但当容器中放置的组件数超过网格数时,则自动增加网格列数,行数不变。v1网格布局类v网格布局类为GridLayout,该类的构造方法如下。v(1)publicGridLayout(introws,intcols):rows表示网格行数,cols表示网格列数。v(2)publicGridLayout(introws,intcols,inthgap,intvgap):rows表示网格行数,cols表示网格列数;hgap和vgap指定组件的水平和垂直间距,单位是像素。v5.2.4卡片布局v使用该布局样式布局容器中的组件时,组件就会像卡片一样排放在容器中,只有最上面的卡片可见。类别类别方方 法法 定定 义义功功 能能构造构造方法方法public CardLayout()创创建一个卡片建一个卡片对对象象实实例例方法方法public void add(String name,Component c)添加添加组组件件c,并指定,并指定组组件的名称件的名称为为namepublic void first(Container parent)显显示第一示第一张张卡片卡片public void last(Container parent)显显示最后一示最后一张张卡片卡片public void next(Container parent)显显示下一示下一张张卡片卡片public void previous(Container parent)显显示前一示前一张张卡片卡片public void show(Container parent,String name)显显示指定名称的卡片示指定名称的卡片5.3按钮、标签、文本行、文本区v5.3.1按钮(Button)v图形用户界面中,按钮常用于接收用户的单击事件。v1.构造方法v(1)publicButton():通过该构造方法创建按钮时,按钮上没有说明信息。v(2)publicButton(Strings):通过该构造方法创建按钮时,按钮上的说明信息为s。v2.常用方法v(1)publicvoidsetLabel(Strings):通过该方法,把按钮上的说明信息设为s。v(2)publicStringgetLabel():通过该方法,获取按钮上的说明信息。v5.3.2标签(Label)v标签的功能是显示静态文本,不能动态地编辑文本,作为提示信息通常由标签实现。v1构造方法v(1)publicLabel():通过该构造方法创建标签时,标签没有提示信息。v(2)publicLabel(Strings):通过该构造方法创建标签时,标签上显示的提示信息为s。v(3)publicLabel(Strings,intalign):通过该构造方法创建标签时,标签上的提示信息为s,并设定了标签文本的对齐方式,分别为Label.LEFT(左对齐)、Label.RIGHT(右对齐)、Label.CENTER(居中对齐),默认对齐方式为居中对齐。v2常用方法v(1)publicvoidsetText(Strings):通过该方法,把标签上的提示信息设为s。v(2)publicStringgetLabel():通过该方法,获取标签上的提示信息。v5.3.3文本行(TextField)v文本行用来输入单行文本。类别类别方方 法法 定定 义义功功 能能构造构造方法方法public TextField()创创建一个内容建一个内容为为空的文本行空的文本行public TextField(String s)创创建一个内容建一个内容为为s的文本行的文本行public TextField(int x)创创建一个能建一个能显显示示x个字符的文本行个字符的文本行public TextField(String s,int x)创创建一个内容建一个内容为为s的文本行,且文本行的文本行,且文本行长长度度为为x实实例例方法方法public void setText(String s)设设置文本行中的内容置文本行中的内容为为spublic String getText()获获取文本行中的内容取文本行中的内容public void setEchoChar(char c)设设置文本行的回置文本行的回显显字符。常用于口令字符。常用于口令输输入入public void setEditable(boolean b)设设置文本的可置文本的可编辑编辑性。当参数性。当参数值为值为false时时,只能只能显显示,不能修改示,不能修改v5.3.4文本区(TextArea)v文本区可以输入多行文本,且文本区带有滚动条。类别类别方方 法法 定定 义义功功 能能构造构造方法方法public TextArea()创创建一个内容建一个内容为为空的文本区空的文本区对对象象public TextArea(String s)创创建一个内容建一个内容为为s的文本区的文本区对对象象public TextArea(int x,int y)创创建一个内容建一个内容为为空且行数空且行数为为x、列数、列数为为y的文本的文本区区对对象象public TextArea(String s,int x,int y)创创建一个内容建一个内容为为s且行数且行数为为x、列数、列数为为y的文本区的文本区对对象象public TextArea(String s,int x,int y,int scollbar)创创建一个内容建一个内容为为s、行数、行数为为x、列数、列数为为y、滚动滚动条条样样式式为为指定指定样样式的文本区式的文本区对对象。象。scollbar取取值为值为:TextArea.SCOLLBARS_BOTH,TextArea.SCOLLBARS_VERTICAL_ONLY,TextArea.SCOLLBARS_HORIZONTAL_ONLY,TextArea.SCOLLBARS_NONE实实例例方法方法public void append(String s)在文本区尾部追加文本内容在文本区尾部追加文本内容s实实例例方方法法public void insert(String s,int position)在文本区位置在文本区位置position处处插入文本插入文本spublic void setText(String s)设设置文本区中的内容置文本区中的内容为为文本文本spublic String getText()获获取文本区的内容取文本区的内容public String getSelectedText()获获取文本区中取文本区中选选中的内容中的内容public void replaceRange(String s,int start,int end)把文本区中从把文本区中从start位置开始至位置开始至end位置之位置之间间的文本的文本用用s替替换换public void setCaretPosition(int position)设设置文本区中光置文本区中光标标的位置的位置public int getCaretPosition()获获得文本区中光得文本区中光标标的位置的位置public void setSelectionStart(int position)设设置要置要选选中文本的起始位置中文本的起始位置public void setSelectionEnd(int position设设置要置要选选中文本的中文本的终终止位置止位置public int getSelectionStart()获获取取选选中文本的起始位置中文本的起始位置public int getSelectionEnd()获获取取选选中文本的中文本的终终止位置止位置public void selectAll()选选中文本区的全部文本中文本区的全部文本5.4事件处理机制v5.4.1Java事件处理概述v引入事件处理机制后的编程基本方法如下。v(1)在java.awt中,组件实现事件处理必须使用java.awt.event包,所以在程序开始处应加入importjava.awt.event.*语句。v(2)用如下语句设置事件监听者:事件源.addXxxListener(事件监听者)。v(3)事件监听者所对应的类实现事件所对应的接口XxxListener,并重写接口中的全部方法。v这样就能处理图形用户界面中的对应事件。要删除事件监听者,可以使用语句:事件源.removeXxxLitener()。v5.4.2Java常用事件事件类事件类/接口名称接口名称接口方法与说明接口方法与说明ActionEvent 动动作事件作事件类类ActionListener接口接口actionPerformed(ActionEvent e)单击单击按按钮钮、选择选择菜菜单项单项或在文本行中按回或在文本行中按回车键时车键时ComponentEvent 调调整事整事件件类类ComponentListener接口接口componentMoved(ComponentEvent e)组组件移件移动时动时componentHidden(ComponentEvent e)组组件件隐隐藏藏时时componentResized(ComponentEvent e)组组件件缩缩放放时时componentShown(ComponentEvent e)组组件件显显示示时时FocusEvent 焦点事件焦点事件类类FocusListener接口接口focusGained(FocusEvent e)组组件件获获得焦点得焦点时时focusLost(FocusEvent e)组组件失去焦点件失去焦点时时ItemEvent 选择选择事件事件类类ItemListener接口接口itemStateChanged(ItemEvent e)选择选择复复选选框、框、单选单选按按钮钮、单击单击列表框、列表框、选选中中带带复复选选框菜框菜单时单时WindowEvent 窗口事窗口事件件类类WindowListener接口接口windowOpened(WindowEvent e)窗口打开后窗口打开后windowClosed(WindowEvent e)窗口关窗口关闭闭后后windowClosing(WindowEvent e)窗口关窗口关闭时闭时windowActivated(WindowEvent e)窗口激活窗口激活时时windowDeactivated(WindowEvent e)窗口失去焦点窗口失去焦点时时windowIconified(WindowEvent e)窗口最小化窗口最小化时时windowDeiconified(WindowEvent e)最小化窗口最小化窗口还还原原时时AdjustmentEvent 调调整整事件事件类类AdjustmentListener接接口口adjustmentValueChanged(AdjustmentEvent e)改改变滚动变滚动条滑条滑块块位置位置v5.4.3事件适配器vJava为那些声明了多个方法的Listener接口提供了一个对应的适配器(Adapter)类,在该类中实现了对应接口的所有方法,只是方法体为空。接接 口口 名名 称称适配器名称适配器名称接接 口口 名名 称称适配器名称适配器名称ComponentListener MouseListenerComponentAdapterMouseAdapterFocusListener MouseMotionListenerFocusAdapterMouseMotionAdapterItemListener WindowListenerItemAdapterWindowAdapterKeyListener KeyAdapter 5.5其他常用组件v5.5.1选择框(Checkbox)v选择框分为复选框与单选按钮两种,在一组复选框中可选多项,但在一组单选按钮中只允许选一项。它们对应的类同为Checkbox。类别类别方方 法法 定定 义义功功 能能构造构造方法方法public Checkbox()创创建没有名称且没有建没有名称且没有选选中的复中的复选选框框public Checkbox(String s)创创建一个名称是建一个名称是s的没有的没有选选中的复中的复选选框,名称框,名称出出现现在复在复选选框右框右侧侧public Checkbox(String s,boolean b)创创建一个名称是建一个名称是s的复的复选选框,名称出框,名称出现现在复在复选选框右框右侧侧,选选中状中状态态由参数由参数b设设定;若定;若b取取值值为为true,则则复复选选框框为选为选中状中状态态,若,若b取取值为值为false,则则复复选选框框为为未未选选中状中状态态public Checkbox(String s,boolean b,CheckboxGroup g)g是是CheckboxGroup类类的的对对象,相当于一个象,相当于一个逻逻辑辑分分组组。当用。当用Checkbox类创类创建建对对象,且象,且对对象属于一个象属于一个逻辑逻辑分分组时组时,创创建的建的对对象象为单为单选选按按钮钮实实例例方法方法public boolean getState()获获取取选择选择框的框的选选中状中状态态public void setState(boolean b)设设置置选择选择框的框的选选中状中状态态public String getLabel()获获取取选择选择框框显显示在右示在右侧侧的名称的名称public void setLabel(String s)设设置置选择选择框的框的显显示在右示在右侧侧的名称的名称v5.5.2选项框(Choice)v这是用户十分熟悉的一个组件,用户可以在下拉列表中看到第一个选项,在选项右侧有一个下拉箭头,当用户单击下拉箭头时,则选项列表打开,用户可选择其中的选项。类类 别别方方 法法 定定 义义功功 能能构造构造方法方法public Choice()该该方法方法创创建一个建一个选项选项框框实实例例方法方法public void add(String name)将将name项项加入到加入到选项选项框中框中public String getItem(int index)获获取位置索引取位置索引编编号号为为index的的选项选项名称名称public int getItemCount()获获取取选项选项框中框中选项选项的数目的数目类 别方方 法法 定定 义义功功 能能实例方法public int getSelectedIndex()获获取取选项选项框中框中选选中中项项的位置索引的位置索引编编号号public String getSelectedItem()获获取取选项选项框中框中选选中中项项的名称的名称public void insert(String item,int index)将将选择项选择项插入到指定位置索引插入到指定位置索引编编号号处处。item代表代表要插入的要插入的项项,index代表插入的位置索引代表插入的位置索引编编号号public void remove(int position)从从选项选项框中移除指定位置的一个框中移除指定位置的一个项项。position表表示位置号示位置号public void remove(String item)移除移除选项选项框中第一个出框中第一个出现现的的 itempublic void removeAll()从从选项选项框中移除所有的框中移除所有的项项public void select(int pos)将位置索引将位置索引编编号号为为pos的的选项设选项设定定为选为选中的中的项项public void select(String str)将此将此选项选项框中名称等于指定字符串框中名称等于指定字符串str的的项设为项设为选选中中项项。当。当选项选项框中有多个框中有多个选项选项名称相同名称相同时时,仅仅把索引把索引编编号最小的号最小的选项设为选选项设为选中状中状态态v5.5.3列表框(List)v列表框与选项框均是从提供的选项中选取选项,但显示形式不同,初始时选项框只显示一项选项,但列表框初始时可显示多个选项。当列表框不足以显示出所有列表项时,自动在右侧添加滚动条。选项框只允许用户选取一个选项,但列表框可供用户选多项。在此把列表框与选项框中一些不同的方法列出.类类 别别方方 法法 定定 义义功功 能能构造构造方法方法public List()创创建一个有默建一个有默认认可可见见行的列表框行的列表框public List(int n)创创建一个能建一个能显显示示n行行选项选项的列表框的列表框public List(int n,boolean b)创创建一个能建一个能显显示示n行行选项选项,且,且设设定了是否允定了是否允许许多多选选的列表框;当参数的列表框;当参数b值为值为true时时,该该列列表框允表框允许许用用户户多多项选择项选择。当参数。当参数b值为值为false时时,该该列表框不允列表框不允许许用用户户多多项选择项选择实实例例方法方法public String getSelectedItems()获获取列表框中取列表框中选选中的多中的多项项名称。返回名称。返回值值是字符是字符串数串数组组public int getSelectedIndexes()获获取取选项选项框中框中选选中的多中的多项项位置索引位置索引编编号。返回号。返回值值是整型数是整型数组组5.6菜单设计v菜单系统由菜单条、菜单、菜单项组成。要创建一个菜单系统,首先要有一个框架,在框架上添加菜单条,然后在菜单条中添加若干个菜单,每个菜单再添加若干菜单项。v1菜单条(MenuBar)v菜单条是一个放置菜单的容器。v(1)构造方法如下所示。vpublicMenuBar():创建一个菜单条。v(2)常用方法如下所示。vpublicMenuadd(Menum):将菜单加入到菜单条中。v在设计菜单时,通过使用Frame类的setMenuBar()方法将菜单条加入到框架中标题条的下方。v2菜单(Menu)v菜单是一个放置菜单项或下一级菜单的容器。菜单对象放在菜单条对象里.类类 别别方方 法法 定定 义义功功 能能构造构造方法方法public Menu(String s)创创建一个建一个标题标题信息信息为为s的菜的菜单单实实例例方法方法public void add(MenuItem it)向菜向菜单单中加入菜中加入菜单项单项public void add(MenuItem it,MenuShortCut ms)向菜向菜单单中加入菜中加入菜单项单项it。菜。菜单项带单项带有有快捷快捷键键public void addSeperator()向菜向菜单单中加入分隔中加入分隔线线public void insert(MenuItem it,int n)向菜向菜单单的指定位置加入菜的指定位置加入菜单项单项public void insert(String s,int n)向菜向菜单单中加入名称中加入名称为为s的菜的菜单项单项public void remove(int n)删删除指定位置的菜除指定位置的菜单项单项v3.菜单项v(1)构造方法如下所示。vMenuItem(Strings):创建一个标题信息为s的菜单项。v(2)常用方法如下所示。vsetEnable(booleanb):设置菜单项的显示状态。当值为true时,菜单项显示,当值为false时,菜单项不显示。v说明:当菜单设计好后,要为菜单项注册事件监听器,无须为菜单条与菜单注册事件监听器,只要用户单击菜单,则自动弹出下级菜单。v4.快捷菜单v快捷菜单也称为弹出式菜单,附着在某个组件上,当在附有快捷菜单的组件上单击鼠标右键时,即显示快捷菜单。vPopupMenu类用于创建快捷菜单,其构造方法为:vpublicPopupMenu()v创建快捷菜单通常要进行如下几个步骤。v(1)把快捷菜单加入到依附的组件。方法为:组件.add(PopupMenupopmenu)。v(2)给依附的组件注册鼠标事件监听器。方法为:组件.addMouseListener(listener)。v(3)实现鼠标事件接口中的方法。一般是在mouseClicked()或mouseRealease()方法中执行popmenu.show(组件,intx,inty)语句。其中组件是指弹出菜单所依附的组件,x、y设定弹出菜单的显示位置。5.7Swing组件介绍vSwing和AWT的关系:(1)Swing构件都是AWT的Container类的直接或间接子类。v(2)Swing是对AWT的扩展,AWT是Swing的基础。v(3)Swing和AWT构件的基本使用方法相同,事件处理机制相同。v在使用时,应注意以下几点。v(1)大多数情况下在AWT组件前加一个J即为Swing组件。组件基本都包含在javax.swing包中。v(2)Swing组件使用的事件模型和AWT相同,但有时除了使用java.awt.event包外,还要用到javax.swing.event包。v(3)若类的属性被命名为Jxxx,则一些相应的方法应改为getJxxx()、setJxxx()等。本章小结v本章以一个学生信息录入界面的案例框架引出了图形用户界面程序设计中用到的相关知识。然后详细介绍了框架与面板组件的用法、容器组件放置其他组件时的布局方式、常用各种组件的样式与用法、事件处理程序的编写。每一部分都有具体的实例对所讲知识进行运用,最后通过学生信息注册界面设计实现案例把本章的内容进行了综合运用。