《JAVA学习-第9章建立JavaGUI.ppt》由会员分享,可在线阅读,更多相关《JAVA学习-第9章建立JavaGUI.ppt(29页珍藏版)》请在三一办公上搜索。
1、江苏大学计算机学院Version 2.0,第9章建立Java GUI,Page 2,描述 Abstract Window Toolkit(AWT)软件包及其组件定义术语容器、组件和布局管理器,并描述如何一起使用它们来构建 GUI正确使用框架和面板容器将组件添加到容器中使用各种布局管理器来获取所需的动态布局,内容,Page 3,AWT(Abstract Window Toolkit)包括了很多类和接口,用于Java Application 的GUI(Graphics User Interface 图形用户界面)编程。GUI的各种元素(如:窗口,按钮,文本框等)由Java 类来实现。使用AWT所涉
2、及的类一般在java.awt包及其子包中。Container和Component是AWT中的两个核心类。AWT由Java的java.awt包提供,该包中有许多用来设计GUI的组件类,如:按钮、菜单、列表、文本框等组件类,同时它还包含窗口、面板等容器类。,Abstract Window Toolkit,Page 4,java.awt 软件包,AWT 软件包的基本概述:,Page 5,Container和Component,Java.awt包中一部分类的层次关系如图所示,Page 6,容器,两种主要类型的容器是:Window:其对象表示自由停泊的顶级窗口Panel:其对象可作为容纳其它Compon
3、ent对象,但不能独立存在,必须被添加到其它Containner中(如Window 或 Applet)window容器包含有两类Frame:有标题的窗口,大小可以调整Dialog:简单的窗口,不能有菜单栏,可以移动但是大小不能调整面板是 GUI 组件的一个容器,它必须在某些其他容器的环境中存在,如窗口或 Applet。使用add()方法添加组件。,Page 7,组件,Java 编程语言支持各种组件Button、Choice、Label、List、Scrollbar、TextComponent 等。容器中组件的位置和大小是由布局管理器决定的。容器保持对布局管理器的一个具体实例的引用。当容器需要确
4、定组件位置时,会调用布局管理器来完成这个任务。当需要确定组件大小的时,容器同样会授权布局管理器。布局管理器完全控制容器中所有组件。它负责在实际屏幕大小环境中定义该对象所期望的大小。如果要控制自己组件的大小而不使用标准的布局管理器,先禁用这个布局管理器:cont.setLayout(null)然后必须对组件使用 setLocation()、setSize()或 setBounds()以在容器中找到它们。,Page 8,Component&Container,Java的图形用户界面的最基本组成部分是Component,Component 类及其子类的对象用来描述以图形化的方式显示在屏幕上并能与用户
5、进行交互的GUI元素,例如,一个按钮,一个标签等。一般的Component对象不能独立地显示出来,必须将“放在”某一的Container对象中才可以显示出来。,Container是Component子类,Container子类对象可以“容纳”别的Component对象。Container对象可使用方法add(.)向其中添加其他Component对象。Containter是Component的子类,因此Containter对象也可以被当作Component对象添加到其他Container对象中。有两种常用的Containter:Window:其对象表示自由停泊的顶级窗口Panel:其对象可作为容
6、纳其它Component对象,但不能独立存在,必须被添加到其它Containner中(如Window 或 Applet),Page 9,框架有以下特性:它们是 Window 的子类具有标题和重调大小的角最初是看不见的,使用 setVisible(true)可以显示框架具有如缺省布局管理器一样的 BorderLayout使用 setLayout()方法更改缺省布局管理器,框架,Page 10,Frame,Frame是Window的子类,由Frame或其子类创建的对象为一个窗体。具有标题和重调大小的角最初是看不见的,使用 setVisible(true)可以显示框架具有如缺省布局管理器一样的 Bo
7、rderLayout使用 setLayout()方法更改缺省布局管理器Frame的常用构造方法:Frame()Frame(String s)创建标题栏为字符串s的窗口。,setBounds(int x,int y,int width,int height)设置窗体位置和大小,x,y是左上角坐标,widht和height是宽度和高度setSize(int width,int height)设置窗体的位置,x,y是左上角坐标setLocation(int x,int y)设置窗体的大小,widht和height分别是宽度和高度。setBackground(Color c)设置背景颜色,参数为Col
8、or对象。setVisible(boolean b)设置是否可见。setTitle(String name)String getTitle()setResizable(boolean b)设置是否可以调整大小。,TestFrame.java基本窗口显示TestMultiFrame.java显示多个不同背景色的窗口,窗口也是一个容器,可以向窗口添加组件。需要注意的是,窗口默认地被系统添加到显示器屏幕上,因此,不允许将一个窗口添加到另一个容器中。,Page 11,框架(续),创建框架的示例:import java.awt.*;public class FrameExample private Fr
9、ame f;public FrameExample()f=new Frame(Hello Out There!);public void launchFrame()f.setSize(170,170);f.setBackground(Color.blue);f.setVisible(true);public static void main(String args)FrameExample guiWindow=new FrameExample();guiWindow.launchFrame();,声明框架对象,初始化框架对象,设置框架的大小,使框架可见,Page 12,Panel,Panel对
10、象可以看成可以容纳Component的空间 创建面板之后,它必须被添加到窗口或框架中 Panel对象可以拥有自己的布局管理器 Panel类拥有从其父类继承来的 setBounds(int x,int y,int width,int height)setSize(int width,int height)setLocation(int x,int y)setBackground(Color c)setLayout(LayoutManager mgr)等方法。Panel的构造方法为:Panel()使用默认的 FlowLayout类布局管理器初始化。Panel(LayoutManager layou
11、t)使用指定的布局管理器初始化。,TestPanel.javaPanel基础用法TestMultiPanel.java多个Panel,Page 13,面板(续),以下代码段帮助您创建一个小的黄色面板,并将它添加到框架中:public Panel pan;public Frame f;f=new Frame(“Im with panel”);pan=new Panel();public void launchFrame()f.setSize(200,200);f.setLayout(null);/使用缺省布局pan.setSize(100,100);pan.setBackground(Color
12、.yellow);f.add(pan);f.setVisible(true);,声明面板对象,初始化面板对象,设置面板的大小,为面板指定黄色,将面板添加到框架,Page 14,布局管理器,Java语言中,提供了布局管理器类的对象可以管理 管理Component在Container中的布局,不必直接设置Component位置和大小。每个Container都有一个布局管理器对象,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器,调用Container的setLayout方法改变其布局管理器对象。Awt提供了5种布局管理器类:FlowLayoutBorderLayoutGr
13、idLayoutCardLayout:GridBagLayout,Page 15,窗口、框架和对话框类的缺省布局管理器是BorderLayout。面板和 Applet 的缺省布局管理器是 FlowLayout。,布局管理器(续),Page 16,FlowLayout 管理器具有以下特性:为 Panel 类形成缺省布局从左至右添加组件缺省的对齐方式是居中对齐使用组件首选的大小使用构造器调整行为,布局管理器(续),Page 17,FlowLayout布局管理器,FlowLayout是Panel类的默认布局管理器。FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后换行。不改变组件
14、的大小,按组件原有尺寸显示组件,可设置不同的组件间距,行距以及对齐方式。使用构造器调整行为 FlowLayout布局管理器默认的对齐方式是居中。,Page 18,FlowLayout 的构造方法,new FlowLayout(FlowLayout.RIGHT,20,40);右对齐,组件之间水平间距20个像素,垂直间距40个像素。new FlowLayout(FlowLayout.LEFT);左对齐,水平和垂直间距为缺省值(5)。new FlowLayout();使用缺省的居中对齐方式,水平和垂直间距为缺省值(5)。,TestFlowLayout.javaFlowLayout初步用法TestFl
15、owLayout2.javaFlowLayout多个Button,Page 19,FlowLayout 的一个简单示例:public class LayoutExample private Frame f;private Button b1;private Button b2;public LayoutExample()f=new Frame(GUI example);b1=new Button(Press Me);b2=new Button(Dont press Me);,布局管理器(续),初始化组件,声明组件,Page 20,public void launchFrame()f.setLa
16、yout(new FlowLayout();f.add(b1);f.add(b2);f.pack();f.setVisible(true);public static void main(String args)LayoutExample guiWindow=new LayoutExample();guiWindow.launchFrame();,布局管理器(续),在框架上添加组件,设置 FlowLayout,Page 21,上述代码将显示以下的输出结果:,布局管理器(续),Page 22,BorderLayout 布局管理器,BorderLayout是Frame类的默认布局管理器。Borde
17、rLayout将整个容器的布局划分成东(EAST)西(WEST)南(SOUTH)北(NORTH)中(CENTER)五个区域,组件只能被添加到指定的区域。如不指定组件的加入部位,则默认加入到CENTER区。每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖。,Page 23,BorderLayout 布局管理器,BorderLayout型布局容器尺寸缩放原则:北、南两个区域在水平方向缩放。东、西两个区域在垂直方向缩放。中部可在两个方向上缩放。,TestBorderLayout.java,Page 24,GridLayout 布局管理器,GridLayout型布局管理器将空间划分成规则的矩
18、形网格,每个单元格区域大小相等。组件被添加到每个单元格中,先从左到右添满一行后换行,再从上到下。在 GridLayout 构造方法中指定分割的行数和列数:如:GridLayout(3,4),TestGridLayout.java,Page 25,在 AWT 中绘制,Graphics 类是一个抽象类,它用来绘制图像。每个组件都有一个 Graphics 对象。Graphics 类实施许多绘制方法。您可以在任何组件中进行绘制(虽然 AWT 只为 Canvas 和 Panel 类提供此功能)。创建 Canvas 或 Panel 的子类并取代 paint()方法。每当显示组件时,调用 paint()方法
19、(例如,如果另一个窗口与组件重叠了并且被除去了),Page 26,paint()方法的示例:public void paint(Graphics g)/在 x,y 的中央处显示词 todayFontMetrics fm=getFontMetrics(g.getFont();String wording=today;int xadj=fm.stringWidth(wording)/2;/文本的左下角位置g.drawString(wording,x-xadj,y);/绘制一条从 x1,y1 到 x2,y2 的红线g.setColor(Color.red);g.drawLine(x1,y1,x2,y
20、2);/绘制一个现有的图像。imX,imY 是图像的左上角。g.drawImage(image,imX,imY,imWidth,imHeight,this);/结束绘制,在 AWT 中绘制(续),Page 27,由 Graphics对象绘制的各种形状:,在 AWT 中绘制(续),Page 28,课堂练习,使用Container的嵌套实现下面布局。,TenButtons.java,Page 29,布局管理器总结,Frame是一个顶级窗口,Frame的缺省布局管理器为BorderLayoutPanel无法单独显示,必须添加到某个容器中。Panel的缺省布局管理器为FlowLayout。当把Panel作为一个组件添加到某个容器中后,该Panel仍然可以有自己的布局管理器。使用布局管理器时,布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件大小和位置属性,如果试图使用Java语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖。如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为:setLayout(null),