第7章 图形用户界面.docx
- 文档编号:13052481
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:51
- 大小:165.01KB
第7章 图形用户界面.docx
《第7章 图形用户界面.docx》由会员分享,可在线阅读,更多相关《第7章 图形用户界面.docx(51页珍藏版)》请在冰点文库上搜索。
第7章图形用户界面
第7章图形用户界面
在前边介绍的应用程序中,都是采用字符方式的用户界面。
从本章开始,将进行图形用户界面的程序设计。
在应用系统中,程序操作界面(用户界面)是用户与计算机系统沟通的桥梁,因此,用户界面的优劣直接关系到的使用。
本章主要介绍Java中的图形用户界面的相关知识,其中包括:
容器、组件、布局管理器等内容。
7.1概述
所谓图形用户界面(GraphicsUserInterface,简称GUI),是指使用图形的方式,以菜单、按钮、标识、图文框等标准界面元素组成的用户操作屏幕。
大家最常见、使用最多的是Windows系统下的用户操作界面。
在应用系统得开发中,根据需要可能要设计各种各样的用户界面。
因此,我们所关心的是开发环境提供了哪些用于构成用户界面的组件元素,这些组件元素的功能及作用是什么,组件元素之间有无关系,如何利用这些组件元素构建用户操作界面。
在Java中,将构成图形用户界面的各种组件元素大致可分为以下三类:
容器、组件和用户自定义成分。
1.容器(Container)
容器是用户屏幕上的一个特殊的窗口,它用来组织或摆放其它界面元素。
一个容器上可以摆放若干个界面元素,这些界面元素本身可能也是一个容器,这些容器上也可摆放其它的界面元素,依次类推就可构成一个复杂的图形界面系统。
例如,框架(Frame)容器是Java中的标准窗口,在它上边可以摆放窗格(Panel)容器和其他组件,在窗格容器上又可以摆放窗格容器和其他组件等等。
容器的引入有利于把复杂的图形用户界面分解为功能相对独立的子部分。
在设计用户界面时,如果使用的界面元素较多,就可以按操作需要分类,将它们分别放在不同的容器中,然后以某种规则(嵌套、行列、顺序等)摆放在用户屏幕上。
如上所述,容器是构建用户界面的关键组件,它的主要特点如下:
1)容器是一个窗口(矩形区域),作为一个组件对象被摆放在屏幕上,有其位置和大小,在它上边摆放的元素也被限制在这个窗口之内。
2)容器作为一个对象可以现身或隐身,当容器现身时,它所包含的所有元素也同时显示出来,当容器被隐身时,它所包含的所有元素也一起被隐藏。
3)容器上的元素可以按一定的规则来排列(布局)。
4)容器的嵌套性,一个容器可以被嵌套在其它的容器之中。
2.组件
组件是图形用户界面上最小的界面元素,它被放置在容器上,它里面不能再包含其它的组件。
组件的作用是显示或接收信息,完成与用户的一次交互。
例如,接收用户的一个命令、显示给用户一段文本或一个图形等等。
3.用户自定义成分
除了标准图形界面元素外,编程人员还可以根据用户的需要设计一些用户自定义的图形界面成分,如绘制一些几何图形、图案等。
由于它们不是Java的标准界面元素,所以不能像标准界面元素那样被系统识别,它们一般不具有响应用户动作的交互功能,仅能起到装饰、美化用户界面的作用。
7.2java.awt类包中的常用容器和组件
在java.awt(abstractwindowtoolkit)类包中包含了用来设计图形用户界面的容器和组件。
该类包是Java中一个较大的包,下边只列出设计图形用户界面常用的容器和组件类的层次结构:
下边我们将简要介绍常用的容器和组件。
7.2.1常用容器
1.Frame类
Frame是最常用的容器之一,它是Window类的派生类,利用它可以创建一个带有标题栏、可选菜单条、最小化和关闭按钮、有边界的标准窗口。
一般把它作为图形用户界面的最外层的容器,它可以包含其它的容器或组件,但其它的容器不能包含它。
下边简要介绍它的构造方法和常用的成员方法。
1)构造方法
常用的构造方法如下:
(1)Frame()用于建立一个没有标题的窗口。
(2)Frame(Stringtitle)用于建立一个带title标题的窗口。
2)常用方法
(1)publicComponentadd(Componentc)将组件c添加到容器上。
(2)publicvoidsetTitle(Stringtitle)将窗口的标题设置成title。
(3)publicvoidsetLayout(LayoutManagermgr)设置容器的布局管理器为mgr。
(4)publicvoidsetSize(intwidth,intheight)设置容器的大小,其中width和height分别表示窗口的宽和高,计算单位为像素。
(5)publicvoidsetBounds(inta,intb,intwidth,intheight)设置容器在屏幕上的位置和大小;其中(a,b)为容器在屏幕上的起始位置即左上角的坐标,默认是(0,0)。
计算单位为像素,
(6)publicvoidsetResizeable(booleanb)设置容器是否可调整大小,默认是可调的。
(7)publicvoidsetVisible(booleanb)设置窗口是否可见,默认是不可见的。
下边我们举例说明Frame类的应用。
例7.1使用Frame类的功能,创建标准窗口。
参考程序如下:
/*这是一个Frame窗口示例程序,程序名字FrameExam7_1.prg*/
importjava.awt.*;//引入java.awt包
publicclassFrameExam7_1extendsFrame
{
publicstaticvoidmain(Stringargs[])
{
FrameExam7_1frame=newFrameExam7_1();//创建对象
frame.setBounds(100,100,250,100);//设置窗口的大小和位置
frame.setTitle("Frame示例窗口");//设置窗口的标题
frame.setVisible(true);//设置窗口是可视的
}
}
本程序类是Frame类的派生类,它继承了Frame类的所有属性和方法。
编译、运行程序,执行结果如图7-1所示。
图7-1示例7.1运行结果
注意:
在程序里必须使用setVisible()方法或show()方法使窗口显示在屏幕上。
系统默认的设置是隐藏。
2.Panel类
Panel(窗格)是一个较为简单的容器。
在它上边可以放置其它的图形用户界面组件,也可放置另一个Panel,即Panel中可以嵌套Panel。
一般使用Panel把一些相关操作的组件组织起来,从而构建出操作简单、布局良好的用户界面来。
1)构造方法
Panel的构造方法如下:
(1)Panel() 创建一个Panel对象,并使用默认的布局管理器FlowLayout摆放添加到窗格上的组件对象。
(2)Panel(LayoutManagerlayout) 创建一个Panel对象,并使用layout所指定的布局管理器摆放添加到窗格上的组件对象。
2.常用方法
(1)publicComponentadd(Componentc)将组件c添加到窗格上。
(2)publicvoidsetLayout(LayoutManagerlayout)设置窗格的布局管理器为layout。
(3)publicvoidsetVisible(booleanb)设置窗格是否可见,默认是可见的。
Panel类本身并没有提供几个方法,但它继承了Container和Component类的所有可用的方法。
限于篇幅,在介绍类时,只介绍主要和常用的属性和方法。
在程序中若用到了其他的方法,会作简单的注释,至于细节问题,需要时请查阅相关的JDK文档。
下面给出一个使用Panel类的示例。
例7.2修改例7.1,在Frame窗口上,添加Panel窗格,在Panel窗格里面再添加另一个Panel窗格。
参考程序如下:
/*这是一个Frame窗口及Panel窗格的示例程序,程序名字PanelExam7_1.prg*/
importjava.awt.*;//引入java.awt包
publicclassPanelExam7_2extendsFrame
{
publicstaticvoidmain(Stringargs[])
{
PanelExam7_2frame=newPanelExam7_2();
frame.setBounds(100,100,250,100);//设置窗口的大小和位置
frame.setTitle("Frame示例窗口");//设置窗口的标题
Panelp1=newPanel();//创建窗格对象p1
p1.setBackground(Color.blue);//设置p1对象的背景颜色为蓝色
p1.setSize(200,80);//设置p1对象的大小
Panelp2=newPanel();//创建窗格对象p2
p2.setBackground(Color.red);//设置p2的背景颜色为红色
p2.setSize(140,60);//设置p2对象的大小
frame.setLayout(null);//设置框架窗口的布局为null空布局
frame.add(p1);//将窗格对象p1添加到框架窗口上
p1.setLayout(null);//设置窗格对象p1的布局为null空布局
p1.add(p2);//将窗格对象p2添加到窗格p1上
frame.setVisible(true);//设置窗口是可见的
}
}
编译运行程序,所获得的界面如图7-2所示。
图7-2例7.2运行结果
7.2.2常用组件
组件是创建图形用户界面最主要的元素,常用的组件有:
Label(标签)、TextField(单行文本框)、TextArea(多行文本框)、Button(按钮)、Checkbox(复选框)、CheckboxGroup(单选框)、List(列表框)、Choice(下拉列表)等等。
下边简要介绍它们的功能及其应用。
1.Label(标签)
标签是一种只能显示文本的组件,不能被编辑。
一般用作标识或提示信息。
1)构造方法
创建标签的构造方法如下:
(1)Label()创建一个空的标签。
(2)Label(Stringtext)创建一个标识内容为text的标签,text的内容左对齐显示。
(3)Label(Stringtext,intalignment)创建一个标识内容为text的标签,text内容的显示对齐方式由alignment指定,alignment可以取类常数值。
2)类常数
用于对齐方式的类常数如下:
(1)LEFT常数值为0,表示左对齐。
(2)RIGHT常数值为2,表示右对齐。
(3)CENTER常数值为1,表示居中对齐。
3)常用方法
(1)publicStringgetText()获得标签的标识内容。
(2)publicvoidsetText(Stringtext)设置标签的标识内容为text。
(3)publicvoidsetVisible(booleanb)设置标签是否可见。
若b的值为true,则标签是可见的,否则被隐藏。
系统默认的设置是true。
2.TextField(单行文本框)
单行文本框是最常用的一个组件,它可以接收用户从键盘输入的信息。
1)构造方法
创建TextField对象的构造方法如下:
(1)TextField()创建一个空的、系统默认宽度的文本框。
(2)TextField(intcolumns)创建一个空的并由columns指定宽度的文本框。
(3)TextField(Stringtext)创建一个具有text字符串内容的文本框。
(4)TextField(Stringtext,intcolumns)创建一个具有text字符串内容且宽度为columns的文本框。
2)常用方法
(1)publicStringgetText()获取文本框的内容。
(2)publicvoidsetText(Stringtext)将text字符串设置为文本框的内容。
(3)publicsetEchoChar(charc)设置密码输入方式,即当用户在文本框中输入字符时,不论输入任何字符,均显示字符c。
(4)publicvoidsetEditable(booleanb)设置文本框的内容是否为可编辑的,若b的值为true,则表示可编辑,否则为不可编辑。
(5)publicvoidsetVisible(booleanb)设置文本框是否可见。
若b的值为true,则文本框是可见的,否则被隐藏。
系统默认的设置是true。
下面给出一个示例说明组件的应用。
例7.3创建一个用户登录界面,如图7-3所示。
参考程序如下:
图7-3用户登录屏幕
/*这是一个用户登录界面示例
*程序名字:
LoginExam7_3.java
*/
importjava.awt.*;
publicclassLoginExam7_3extendsFrame//这是一个Frame类的派生类
{
Labell1,l2;//声明两个标签变量
TextFielduser,password;//声明两个文本框变量
Panelp1;//声明一个窗格变量
publicLoginExam7_3()
{
l1=newLabel("用户名:
");//创建标签对象
l2=newLabel("口令:
");//创建标签对象
user=newTextField(10);//创建文本框对象
password=newTextField(10);//创建文本框对象
password.setEchoChar('*');//设置文本框对象的输入方式是密码输入
p1=newPanel();//创建窗格对象
p1.add(l1);//将对象l1加到窗格上
p1.add(user);//将对象user加到窗格上
p1.add(l2);//将对象l2加到窗格上
p1.add(password);//将对象password加到窗格上
this.setTitle("用户登录");//设置框架窗口标题
this.add(p1);////将窗格对象p1加到框架窗口上
this.setBounds(100,100,200,100);//设置框架窗口的显示位置及大小
this.setVisible(true);//设置框架窗口是可见的
}
publicstaticvoidmain(Stringargs[])
{
newLoginExam7_3();//创建对象显示用户登录界面
}
}
3.TextArea(多行文本框)
多行文本框呈现一个多行的矩形区域,用于编辑处理多行文本。
1)构造方法
构造多行文本框对象的方法如下:
(1)TextArea()创建一个空的多行文本框。
(2)TextArea(introws,intcolumns)创建一个具有rows行columns列的空文本框。
(3)TextArea(Stringtext)创建一个具有text字符串内容的文本框。
(4)TextArea(Stringtext,introws,intcolumns)创建一个具有rows行columns列且具有text字符串内容的文本框。
(5)TextArea(Stringtext,introws,intcolumns,intscrollbars)创建一个具有rows行columns列且具有text字符串内容的文本框,由scrollbars确定显现横、竖滚动条的方式,它可以取类常数的值。
注意:
创建TextArea对象时,系统的默认方式是带有滚动条。
2)类常数
类常数用来确定滚动方式,常数说明如下:
(1)SCROLLBARS_BOTH其值为0,表示显示横、竖向滚动条。
(2)SCROLLBARS_HORIZONTAL_ONLY其值为2,表示只显示横向滚动条。
(3)SCROLLBARS_VERTICAL_ONLY其值为1,表示只显示竖向滚动条。
(4)SCROLLBARS_NONE其值为3,表示不显示滚动条。
3)常用方法
(1)publicvoidsetText(Strings)将字符串s设置为文本框的内容,替换掉原有内容。
(2)publicStringgetText()获取文本框中的内容。
(3)publicvoidsetEditable(booleanb)设置文本框中的内容是否可以编辑,若b的值为true,则表示可以编辑;否则为不可编辑。
系统默认为可编辑的。
(4)publicvoidinsert(Stringstr,intpos)将字符串str插入到文本框中由pos指定的位置处。
(5)publicvoidappend(Strings)将字符串s追加到文本框中现有内容的后面。
(6)publicvoidreplaceRange(Stringstr,intstart,intend)以字符串str替换掉文本内容中从start.到end位置之间的字符。
下边看一个示例简要说明组件的用法。
例7.4创建如下的用户编辑界面:
图7-4例7.4文本编辑界面
参考程序如下:
/*这是一个编辑文本的界面示例
*程序名字:
TextAreaExam7_4.java
*/
importjava.awt.*;
publicclassTextAreaExam7_4extendsFrame//这是一个Frame类的派生类
{
TextAreat1;
publicTextAreaExam7_4()
{
setTitle("编辑文本示例:
");//设置框架窗口标题
t1=newTextArea("可以在该框中编辑多行文本:
",10,5);//创建文本域对象
add(t1);//将对象t1加到框架窗口上
setBounds(100,100,400,300);//设置框架窗口的显示位置及大小*/
this.setVisible(true);//设置框架窗口是可见的
}
publicstaticvoidmain(Stringargs[])
{
newTextAreaExam7_4();//创建对象显示用户登录界面
}
}
4.Checkbox(复选框)
复选框是一种可以多选的选择框。
当有多个选项供用户选择时,可使用该组件类。
它在外观上显示为一小方框(选中)或(未选中)。
若只是允许用户单选,即只能选择其中的一项时,则可以将多个Checkbox对象放在同一个CheckboxGroup组件组中,其在外观上显示为一小圆圈(选中)或(未选中)。
1)构造方法
(1)Checkbox()创建一个无标识的复选框对象。
(2)Checkbox(String label)创建一个以字符串label为标识的复选框对象。
(3)Checkbox(String label,boolean state)创建一个以字符串label为标识的复选框对象。
若state为true,则初始状态为选中;否则未选中。
(4)Checkbox(String label,boolean state,CheckboxGroup group)创建一个复选框对象并将它放入CheckboxGroup类对象group中。
注意:
CheckboxGroup不是可视组件,我们看不见,它用来将Checkbox组件组合在一起,实现单选操作。
2)常用方法
(1)publicStringgetLabel()获得对象标识。
(2)publicbooleangetState()获得对象选中或未选中状态。
(3)publicCheckboxGroupgetCheckboxGroup()获得对象所属的组。
(4)publicvoidsetLabel(String label)设置对象的标识。
(5)publicvoidsetState(boolean state)设置对象的状态。
(6)publicvoidsetCheckboxGroup(CheckboxGroup g)将对象加入g组中。
下面给给出示例说明组件的用法。
例7.5创建如图7-5的学生选课用户界面。
我们先分析一下该用户界面,它有三部分组成,第一部分为标识,可以采用标签框实现;第二部分为复选项,可以将它们放入一个窗格中摆放;第三部分为单选项,也可把它们摆放到一个窗格中。
参考程序如下:
图7-5例7.5选课界面
/*这是一个使用Checkbox组件的示例
*程序名为:
CheckboxExam7_5.prg
*/
importjava.awt.*;
publicclassCheckboxExam7_5extendsFrame
{
String[]option1={"高数Ⅰ","高数Ⅱ","大学物理","线形代数","英语","俄语"};
String[]option2={"毛泽东思想概论","邓小平理论","中国革命史"};
Labell1=newLabel("请根据需要选择如下课程:
");
Checkbox[]op1,op2;//定义两个组件数组
CheckboxGroupgroup=newCheckboxGroup();//定义存放单选组件的对象
Panelp1=newPanel();//定义窗格对象p1
Panelp2=newPanel();//定义窗格对象p2
publicCheckboxExam7_5()//构造方法
{
op1=newCheckbox[option1.length];//定义组件数组的大小
for(inti=0;i op2=newCheckbox[option2.length];//定义组件数组的大小 for(inti=0;i op2[i]=newCheckbox(option2[i],false,group);//生成单选对象 for(inti=0;i for(inti=0;i setTitle("Checkbox组件应用示例"); setSize(400,200); setLayout(newFlowLayout());//设置组件在框架窗口上的摆放布局为流布局 add(l1);//将标签摆放到框架窗口上 add(p1);//将窗格p1摆放到框架窗口上 add(p2);//将窗格p2摆放到框架窗口上 setVisible(t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 图形用户界面 图形 用户界面