JAVA第8章GUI
- 格式:doc
- 大小:967.56 KB
- 文档页数:65
第8章图形用户界面设计学习目标Java API提供了AWT和Swing两套组件来实现图形用户界面。
它们包含了用来设计图形用户界面的各种基本控制组件,容器组件和布局管理组件,并采用事件委托的处理模式。
本节将介绍AWT包和Swing包各自的特点,并学习Java组件的概念。
本章要点☑什么是GUI☑布局管理机制☑AWT组件☑Swing组件8.1 容器和组件容器和组件都是图形用户界面中的重要概念,本节将从容器与组件入手来学习图形用户界面的相关知识。
8.1.1 什么是用户图形界面图形用户界面(Graphics User Interface,GUI)提供了所见即所得的功能,方便了用户的操作,成为软件设计的通用标准。
Java语言提供了图形用户界面所需要的基本组件,这些组件全部包含在java.awt包中,利用这些组件可以设计出功能强大的GUI软件。
Java1.0的出现带来了AWT(Abstract Windowing Toolkit),中文译为抽象窗口工具包。
设计目标是希望构建一个通用的GUI,使得利用它编写的程序能够运行在所有的平台上。
在Java1.2中,Sun公司推出了新的用户界面库:Swing。
相对AWT来说,Swing功能更强大、使用更方便,它的出现使得Java的图形用户界面上了一个台阶。
但是,Swing并没有代替AWT,在Java1.1中,AWT事件处理模型有了根本改变。
Swing使用的仍然是Java1.1的事件处理模型。
8.1.1 容器和组件的概念容器是一种特殊的组件,它可以包含其他组件,即可以把组件放在容器中。
反之,如果一个组件不是组件容器,则其中不能包含其他组件。
容器也是一种组件,所以一个组件容器可以放在另一个组件容器中。
¤Java程序设计教程︻电脑基础·实例·上机系列教程︼AWT容器分为两类:外部容器和内部容器。
其中,外部容器一般会独立存在,例如Frame类;而内部容器则会嵌套在外部容器内部使用,例如Panel类。
容器的层次结构如图8-1所示:图8-1 AWT容器的层次结构其中两个最常用的容器是Frame和Panel。
在后面还要单独介绍Applet(一种特殊的Panel)。
框架(Frame):Frame是顶级窗口,可以显示标题,重置大小。
面板(Panel):面板提供了建立应用程序的空间,可以把图形元件(包括其他面板)放在一个面板上,然后把这个面板作为内部容器放在Frame等外部容器上。
8.1.3 容器与组件结构模型抽象窗口工具包是一组Java类,此组Java类允许创建图形用户界面,图8-2展示了java.aet包中的类体系结构:5859 第8章 图形用户界面设计 ¤︻电脑基础·实例·上机系列教程︼ 图8-2 java.aet 包中的类体系结构8.1.4 范例Frame 与Panel 的创建【范例1】 创建Frame 类,(光盘:\源文件\第8章\范例MyFrame.txt )。
操作步骤如下:(1)在NetBeans 中新建一个项目。
选择“Java 应用程序”,单击“”按钮,填写项目的主类名称为“MyFrame ”,创建主类为“myframe.MyFrame ”,最后单击“”按钮如图8-3、图8-4所示:ng.ObjectAWTEvent Font Component Graphics MenuComponent 各种布局管理器ContainerPanel WindowApplet Frame¤Java程序设计教程︻电脑基础·实例·上机系列教程︼图8-3 “新建项目”对话框图8-4 “新建Java应用程序”对话框(2)在设计区域内填写如下代码:import java.awt.*; //此包必须引入public class MyFrame extends Frame{ //继承Frame类public static void main(String args[]){MyFrame fr=new MyFrame("Please see there!This is a frame");fr.setSize(400,200); //窗口大小为400*2006061 第8章 图形用户界面设计 ¤︻电脑基础·实例·上机系列教程︼ fr.setBackground(Color.blue); //背景为兰色 fr.setVisible(true); //设置窗口可见 }public MyFrame(String str){ //定义构造方法 super(str); //调用父类的构造方法 } } (3)单击“”按钮,得到如图8-5所示结果。
图 8-5 类“MyFrame ”运行结果【范例2】 创建Panel 类,(光盘:\源文件\第8章\范例PanelTest.txt )。
操作步骤如下:(1)按照范例1的方法,在NetBeans 中新建一个项目。
选择“Java 应用程序”,单击“”按钮,填写项目名称和主类名称为“PanelTest ”。
(2)在设计区域内填写如下代码:import java.awt.*;class PanelTest extends Panel{public static void main(String args[]){ PanelTest p= new PanelTest();Frame f=new Frame("在框架中添加面板示例!"); f.add(p); //将面板添加到框架窗体 f.setSize(300,200); f.setVisible(true);} }(3)单击“”按钮,得到如图8-6所示的结果。
¤Java程序设计教程︻电脑基础·实例·上机系列教程︼图8-6 类“PanelTest”运行结果8.2 布局(Layout)管理机制在GUI程序中,组件的位置由容器的默认布局管理器布置,当组件很多时,窗口会显得非常凌乱,用户可以通过窗口的缩放来手工调整,但效果不会很好,最好的方法是运行窗口布局管理器这一利器。
8.2.1 什么是布局管理机制每一个容器都有默认的布局管理器,再创建一个容器对象的时候,同时也会创建一个相应的默认布局管理器对象,用户也可以随时为容器创建和设置新的布局管理器。
选择了容器之后,可以通过容器的setLayout()和getLayout()方法来确定布局,也就是限制容器中各个组件的位置和大小等。
Java提供了多种布局,如顺序布局(Flow Layout)、边界布局(Border Layout)和网格布局(Grid Layout)等等。
8.2.2 顺序布局管理器顺序布局(Flow Layout)是最基本的一种布局,面板的默认布局就是顺序布局。
顺序布局指的是把图形元件一个接一个地放在面板上。
下面是一个顺序布局的例子。
【例8-1】创建顺序布局管理器,(光盘:\源文件\第8章\例8-1.txt)。
操作步骤如下:(1)按照8.1.4 范例1的方法,在NetBeans中新建一个项目。
选择“Java应用程序”,单击“”按钮,填写项目名称和主类名称为“MyFlowLayout”。
(2)在设计区域内填写如下代码:import java.awt.*;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class MyFlowLayout{private Frame f;private Button button1, button2, button3;public static void main (String args[]) {MyFlowLayout mflow = new MyFlowLayout ();62第8章图形用户界面设计¤︻电脑基础·实例·上机系列教程︼mflow.go();}public void go() {f = new Frame ("FlowLayout演示");f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent evt) {f.setVisible(false);f.dispose();System.exit(0);}});//f.setLayout(new FlowLayout());f.setLayout(new FlowLayout(FlowLayout.LEADING, 20, 20));button1 = new Button("确定");button2 = new Button("打开");button3 = new Button("关闭");f.add(button1);f.add(button2);f.add(button3);f.setSize (200,200);//f.pack();f.setVisible(true);}}(3)单击“”按钮,得到如图8-7所示的结果。
图8-7 类“MyFlowLayout”运行结果8.2.3 边界布局管理器边界布局(Border Layout)包括5个区:北区、南区、东区、西区和中区。
这5个区在面板上的分布规律是“上北下南,左西右东”。
下面是一个边界布局的例子。
【例8-2】边界布局管理器(光盘:\源文件\第8章\例8-2.txt)。
布局项横向间距布局项纵向间63¤Java程序设计教程︻电脑基础·实例·上机系列教程︼操作步骤如下:(1)按照8.1.4范例1的方法,在NetBeans中新建一个项目。
选择“Java应用程序”,单击“”按钮,填写项目名称和主类名称为“MyFlowLayout”。
(2)在设计区域内填写如下代码:package sample;import java.awt.*;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class MyBorderLayout {Frame f;Button east, south, west, north, center;public static void main(String args[]) {MyBorderLayout mb = new MyBorderLayout();mb.go();}public void go() {f = new Frame("BorderLayout 演示");f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent evt) {f.setVisible(false);f.dispose();System.exit(0);}});f.setBounds(0, 0, 300, 300);f.setLayout(new BorderLayout());north = new Button("北");south = new Button("南");east = new Button("东");west = new Button("西");center = new Button("中");f.add(BorderLayout.NORTH, north);f.add(BorderLayout.SOUTH, south);f.add(BorderLayout.EAST, east);f.add(BorderLayout.WEST, west);f.add(BorderLayout.CENTER, center);f.setVisible(true);6465 第8章 图形用户界面设计 ¤︻电脑基础·实例·上机系列教程︼ } } (3)单击“”按钮,得到如图8-8所示的结果。