第7章 Java GUI图形用户界面应用程序设计.docx
- 文档编号:7228447
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:126
- 大小:498.68KB
第7章 Java GUI图形用户界面应用程序设计.docx
《第7章 Java GUI图形用户界面应用程序设计.docx》由会员分享,可在线阅读,更多相关《第7章 Java GUI图形用户界面应用程序设计.docx(126页珍藏版)》请在冰豆网上搜索。
第7章JavaGUI图形用户界面应用程序设计
第7章JavaGUI(图形用户界面)应用程序设计
教学目标:
学生通过本章学习应掌握Java图形用户界面编程工具集AWT中的基本组件类﹑类的层次关系﹑基本组件类的使用方法和用户界面布局设计﹑Swing图形用户界面.
一、重点与难点:
Java抽象窗口工具集,Java事件处理﹑AWT组件﹑Swing图形用户界面﹑图形设计
二、教具:
可进行广播的教学或多媒体计算机局域网,投影仪及相关的软硬件.
三、教学方法:
理论与实训相结合。
四、教学时数:
第5-6周8小时
五、作业及上机练习:
P.217--1.~12.
7.1Java抽象窗口工具集
图形用户界面(GraphicsUserInterface–GUI),指使用图型的方式,借助菜单﹑按钮等标准界面元素和鼠标操作向计算机系统发出指令﹑启动操作,将运行结果以图形方式显示给用户。
图形用户界面是当今流行的操作系统界面,其特点是界面美观漂亮﹑操作简单方便,深受用户欢迎.因此Java语言为了适应发展趋势,也具有开发图形化用户界面的功能。
早期的Java版本JDK1.0和JDK1.1采用的是AWT组件。
特点是简单、易于理解。
Java1.2版,图形用户界面功能被大幅度地扩展,形成了称为Java基础类库(JavaFoundationClass,JFC)的一整套API集合,主要包括以下5个部分:
⑴AWT抽象窗口工具集;
⑵Swing图形界面类库;
⑶支持二维图形的类库(Java2D);
⑷支持拖放的类库(DragandDrop);
⑸支持易用性的类库(Accessibility)。
主要的部分是Swing图形界面类库。
Swing组件是用纯Java实现的,在不同的平台上其表现是一致的。
Swing组件没有本地代码,不依赖于具体的本机操作系统的支持,并且还有能力提供本地系统不支持的其它特性,这是它与AWT组件的最大区别。
Swing组件实现了平台无关的Java语言。
Swing组件是AWT组件的扩展,它提供了许多新的图形用户界面组件。
大部分AWT组件都在Swing组件中进行了重写。
1.AWT(AbstractWindowToolkit-抽象窗口工具集)是Java语言提供的图形用户界面设计工具,它的核心是把GUI看作由一系列嵌套的组件构成。
这些组件之间在外观上有包含﹑相邻﹑相交等物理关系,而且包含内部调用等逻辑关系.AWT组件被放在java.awt包中并有许多用来设计图形用户界面的类和接口,用于JavaApplication和Applet的GUI设计.AWT组件相关类的层次关系如图7-1所示:
(1)组件—图形用户界面的各种元素称为组件Component,它是一个图形化方式显示在屏幕上与用户交户的对象,组件分容器类(Container)和非容器类组件,容器类组件可包含其它组件,也可以是其它容器。
非容器类组件不包含其它组件,提供人机交互如按钮类Button﹑标签类Label﹑TextComponent-文本类.
(2)容器—用来组织其它界面元素的单元,如窗口包含许多界面成分和元素,这些界面元素本身又可以是容器,这个容器再进一步包含它的界面成分和元素依此类推,形成复杂图形用户界面。
容器类分顶层容器和非顶层容器两类:
顶层容器可以是独立窗口,顶层容器类是Window其常用的子类为Frame-窗口(框架)类﹑Dialog-对话框类,这两个类带有边框﹑可移动﹑放大﹑缩小和关闭功能.非顶层容器必须位于某个顶层容器窗口之内,不能独立存在。
面板类属非顶层容器类如:
Scollpane滚动面板子类,Applet面板子类,都是无边框的容器类.容器特点:
1.容器有一定范围:
一般为矩形边界有边框,有些无可见标记。
2.容器有一定位置:
位置可是屏幕四角的绝对位置,也可是相对其它容器的相对位置
3.容器有一个背景:
背景覆盖全部容器,可透明,也可以指定一幅图案,使界面生动活泼。
4.容器包含许多界面成分和元素:
容器打开显示时,其上面的所有成分和元素被显示出来,关闭时被隐藏。
5.容器可按一定的物理规则排列它元素的相对位置和前后排列关系。
容器是Component组件的子类,具有组件的所有性质,因此也是组件。
Component类中定义了各种GUI组件对象所需的属性和方法。
容器类对象可使用父类Component中的add()方法添加组件。
Java中GUI容器类层次关系图:
容器包含两个抽象类:
Window类和Panel类,Window类可自由停泊在顶层窗口,Panel类为可容纳其它组件的非顶层容器,它不能独立存在,必须被添加到其它容器中,如Window或Applet容器,向容器中添加组件用add()方法,删除容器中的组件用removeAll()方法或remove(Componentc)方法,为保正在容器中正常显示组件,应调用validate()方法.
Java组件在容器中的位置和尺寸由布局管理器决定,人工控制组件在容器中的位置和尺寸,可取消布局管理器,使用如下方法:
publicsetLocation(intx,inty)–设置(移动)当前组件到一个新位置坐标点。
publicsetSize(intwidth,intheight)–设置组件大小。
publicsetBounds(intx,inty,intwidth,intheight)–设置窗口在屏幕显示位置为距屏幕左面x像素,距上方y像素,宽度和高度。
抽象Window类不能实例化,因此在子类Frame-框架类中实现
1.Frame类的特点
(1)Frame类是抽象类Window的子类。
(2)Frame对象显示一个带标题和尺寸重置角标的窗口。
(3)默认为不可见。
设置setVisible(ture)为可视。
(4)默认布局管理器是BorderLayout(边界布局管理器),可使用setLayout()方法改变其默认布局管理器,Frame类的层次关系如图:
java.lang.Object
├─java.awt.Component
├─java.awt.Container
├─java.awt.Window
└─java.awt.Frame
例7-1TestFrame.java–框架窗口应用
importjava.awt.*;
publicclassTestFrame{
publicstaticvoidmain(Stringargs[]){
//创建标题为MyFrameTest的框架窗口容器对象实例
Framef=newFrame("MyFrameTest");
f.setSize(170,100);//设置Frame组件窗口大小(宽﹑高)
f.setBackground(Color.blue);//设置Frame组件背景色为蓝色
f.setVisible(true);//设置Frame组件为可视
}
}
编译为.class文件用JCreator执行
2.Panel面板类的特点
(1)Panel类是非顶层容器它不能独立存在,必须被添加到其它容器中,如Window或Applet
(2)Panel类可容纳其它组件,在程序中用于布局和定位。
(3)可用所在容器的不同布局管理器布局。
(4)默认布局管理器为FlowLayout(流布局管理器),可使用setLayout()方法改变其默认布局管理器。
Panel类的层次关系如图:
java.lang.Object
├─java.awt.Component
├─java.awt.Container
└─java.awt.Panel
例7-2TestFrameWithPanel.java–面板类的应用(面板类的默认布局管理器为FlowLayout布局)
importjava.awt.*;
publicclassTestFrameWithPanel{
publicstaticvoidmain(Stringargs[]){
Framef=newFrame("MyFrameWithPanelTest");//创建带标题的窗口容器组件对象实例
Panelpan=newPanel();//在窗口容器上创建面板容器对象
f.setSize(180,100);//设置Frame组件窗口大小(宽﹑高)
f.setBackground(Color.blue);//设置Frame组件背景色为蓝色
f.setLayout(null);//取消布局管理器(可同时看到窗口和面板组件)
pan.setSize(100,60);//设置面板容器大小(宽﹑高)
pan.setBackground(Color.green);//设置面板容器组件背景色为绿色
f.add(pan);//在窗口容器组件中添加面板容器对象
f.setVisible(true);//设置Frame组件为可视
}
}
编译为.class文件用JCreator执行
2-1.ScrollPane类
是Container类的子类,因此也是一个容器称为滚动面板,经常将组件放到面板中,然后再添加到滚动面板中显示。
ScrollPane有2个构造方法:
(1)ScrollPane()-创建滚动面板,滚动条初始不可见,当组件范围大于滚动面板时,滚动条自动产生。
(2)ScrollPane(inta)-参数a指定滚动条的初始状态,有3个值。
ScrollPane.SCROLLBARS_ALWAYS-总是带滚动条
ScrollPane.SCROLLBARS_AS_NEEDED–滚动条作为需要的
ScrollPane.SCROLLBARS_NEVER-不需要滚动条
【例7.11】-Example7_11.java流布局
importjava.awt.*;
importjava.awt.event.*;
classWindoTenextendsFrameimplementsActionListener{
Panelp;//声明面板容器对象
ScrollPanescrollpane;//声明滚动条面板容器对象
WindoTen(){//窗口构造函数
setLayout(newFlowLayout());//设为流布局
p=newPanel();//创建面板容器对象
scrollpane=newScrollPane(ScrollPane.SCROLLBARS_ALWAYS);//创建滚动条面板容器对象
p.add(newButton("one"));//添加4个按钮到面板容器对象中
p.add(newButton("two"));
p.add(newButton("three"));
p.add(newButton("four"));
scrollpane.add(p);//将面板容器对象添加到滚动条面板容器对象中
add(scrollpane);//将滚动条面板容器添加到窗口容器中
setBounds(60,60,200,200);//设置窗口在屏幕显示位置为距屏幕左面60像素,距上方60像素,宽高各为200
setVisible(true);//设置窗口可见
validate();//添加组件时调用validate()生效方法,保证组件在容器中正确显示
}
publicvoidactionPerformed(ActionEvente){System.exit(0);}
}
publicclassExample7_11{
publicstaticvoidmain(Stringargs[]){
newWindoTen();//创建窗口对象并调用构造函数
}
}
7.1.2布局管理器
为生成具有良好与平台无关性的图形用户界面,Java中提供了布局管理器工具(ContainerLayouts)来管理组件在容器中的布局,而不手动设置组件位置和大小。
每个容器都有一个布局管理器,当容器需对组件定位或判断大小尺寸时,就会调用其对应的布局管理器。
Java语言目前提供有FlowLayout,BorderLayout,GridLayout,BoxLayout,CardLayout,GridBagLayout等布局管理器。
(1)FlowLayout(流布局管理器)
FlowLayout流布局管理器是Panel类的默认容器布局管理器。
FlowLayout布局对组件逐行定位,行内从左到右,一行排满后换行,默认对齐为居中对齐。
不改变组件的大小,按组件原有尺寸显示组件,可在构造方法中设置不同的组件间距,行距及对齐方式。
FlowLayout的构造方法
newFlowLayout(FlowLayout.RIGHT,20,40);//右对齐,组件之间水平间距20个像素,竖直间距40个像素。
newFlowLayout(FlowLayout.LEFT);//左对齐,水平间距和竖直间距为默认5个像素。
newFlowLayout();//居中对齐,水平间距和竖直间距为默认5个像素。
例7-3TestFlowLayout.java-流布局应用
importjava.awt.*;
publicclassTestFlowLayout{
publicstaticvoidmain(Stringargs[]){
Framef=newFrame("FlowLayout");//创建带标题的窗口容器组件对象实例
Buttonbutton1=newButton("Ok");//创建3个按钮组件对象
Buttonbutton2=newButton("Open");
Buttonbutton3=newButton("Close");
//窗口设置为流布局管理器:
居中对齐,水平间距和竖直间距为默认5个像素(),注意:
Frame默认是BorderLayout(边界布局管理器).
f.setLayout(newFlowLayout());//创建居中对齐的流布局对象并将窗口设置为流布局
f.add(button1);//将3个按钮添加到容器f中
f.add(button2);
f.add(button3);
f.setSize(100,100);//设置窗口(框架)容器大小
f.setVisible(true);//设置窗口容器为可视
}
}
编译为.class文件用JCreator执行
(2)BorderLayout(边界布局管理器)
BorderLayout(边界布局管理器)将整个容器的布局划分成东﹑南﹑西﹑北﹑中五个区域,组件只能被添加到指定的区域﹑每个区域只能加入一个组件,后加入的组件会代替前组件,不指定组件区域默认放在Center区域。
BorderLayout边界布局容器尺寸缩放原则:
南﹑北区域在水平方向缩放
东﹑西区域在垂直方向缩放
中部区域在两个平方向缩放
布局为:
例7-4TestBorderLayout.java-边界布局管理器应用-Frame默认是BorderLayout(边界布局管理器).
importjava.awt.*;
publicclassTestBorderLayout{
publicstaticvoidmain(Stringargs[]){
Framef;
f=newFrame("BorderLayout");//创建Frame窗口容器
Buttonbn=newButton("BN");//创建5个对应按钮
Buttonbs=newButton("BS");
Buttonbw=newButton("BW");
Buttonbe=newButton("BE");
Buttonbc=newButton("BC");
f.add(bn,"North");//添加五个组件按钮添加到窗口容器f中的边界布局东﹑南﹑西﹑北﹑中
f.add(bs,"South");
f.add(bw,"West");
f.add(be,"East");
f.add(bc,"Center");
f.setSize(200,200);//设置窗口容器尺寸
f.setVisible(true);//设置窗口容器可视
}
}
编译为.class文件用JCreator执行
(3)GridLayout(网(栅)格布局管理器)
GridLayout(网(栅)格布局管理器)将布局划分为矩形网格,每个单元格区域大小相等。
组件被添加到每个单元格中,先从左到右添满换行,再从上到下:
在GridLayout()构造方法中指定分隔的行列数,如:
NewGridLayout(3,4);//创建3行4例的网格布局
例7-5TestGridLayout.java-网格布局管理器应用
importjava.awt.*;
publicclassTestGridLayout{
publicstaticvoidmain(Stringargs[]){
Framef=newFrame("GridLayoutExample");//创建Frame窗口容器
Buttonb1=newButton("b1");//创建6个按钮
Buttonb2=newButton("b2");
Buttonb3=newButton("b3");
Buttonb4=newButton("b4");
Buttonb5=newButton("b5");
Buttonb6=newButton("b6");
f.setLayout(newGridLayout(3,2));//设置窗口容器布局为3行2例的网格布局
f.add(b1);f.add(b2);//将6个按钮添加到窗口3行2例网格布局中去
f.add(b3);f.add(b4);
f.add(b5);f.add(b6);
f.pack();//设置窗口容器为紧凑格式
f.setVisible(true);//设置窗口容器可视
}
}
编译为.class文件用JCreator执行
【例7.15】Example7_15.java-网格布局
importjava.awt.*;
importjava.awt.event.*;
classWinGridextendsFrame
{GridLayoutgrid;//声明网格布局对象
WinGrid()//构造方法
{grid=newGridLayout(12,12);//创建12行列网格布局对象
setLayout(grid);//设置布局为网格布局
Labellabel[][]=newLabel[12][12];//创建一个标签类的12行列的二维数组label
for(inti=0;i<12;i++)//外层循环输出行i
{for(intj=0;j<12;j++)//内层循环输出行列j
{label[i][j]=newLabel();//创建标签对象存入二维数组
if((i+j)%2==0)//如果行列下标之和能被2整除
label[i][j].setBackground(Color.black);//设置标签对象颜色为黑色
else//否则
label[i][j].setBackground(Color.white);//设置标签对象颜色为白色
add(label[i][j]);//添加标签对象到窗口容器中
}
}
//设置窗口在屏幕显示位置为距屏幕左面10像素,距上方10像素,宽高各为260
setBounds(10,10,260,260);
setVisible(true);//设置窗口及标签对象可视
validate();
}
}
publicclassExample7_15
{publicstaticvoidmain(Stringargs[])
{newWinGrid();//创建窗口对象并调用构造函数
}
}
(4)BoxLayout–盒式布局管理器
BoxLayout在java.swing.border包中,也是Container类中的一个子类,因此为盒式容器。
构造方法:
BoxLayout(Containercon,intaxis)
con-容器对象
axis的值有:
(1)BoxLayout.X_AXIS–行型布局
(2)BoxLayout.Y_AXIS–列型布局。
组件加入的顺序是从左(上)到右(下)排列,容器的两端为剩余空间。
与FlowLayout流布局局不同的是,它仅有一行(列),无论组件多少只排列在该行(列)中,因此组件可能被压缩变形。
【例7.16】Example7_16.java布局
importjavax.swing.*;//引入swing.*
importjava.awt.*;
importjavax.swing.border.*;
publicclassExample7_16
{publicstaticvoidmain(Stringargs[])
{newWindowBox();//创建窗口对象并调用构造方法
}
}
classWindowBoxextendsFrame//声明WindowBox子类继承Frame类
{BoxbaseBox,boxV1,boxV2;//声明行型盒式布局容器对象baseBox,列型盒式布局容器对象boxV1,boxV2引用变量
WindowBox()//构造方法
{boxV1=Box.createVerticalBox();//使用Box类的静态方法获得一个列型盒式布局容器对象boxV1
boxV1.add(newLabel("姓名"));//在容器中添加姓名标签组件
boxV1.add(Box.createVerticalStrut(8));//在容器中添加垂直支撑高度为8(控制组件间的垂直距离),宽度为0
boxV1.add(newLabel("email"));//在容器中添加email标签组件
boxV1.add(Box.createVerticalStrut(8));//在容器中添加垂直支撑高度为8,宽度为0
boxV1.add(newLabel("职业"));//在容器中添加职业标签组件
boxV2=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 Java GUI图形用户界面应用程序设计 GUI 图形 用户界面 应用 程序设计
![提示](https://static.bdocx.com/images/bang_tan.gif)