《JavaGUI设计原理概述.pptx》由会员分享,可在线阅读,更多相关《JavaGUI设计原理概述.pptx(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第十四课Java GUIJava GUI设计设计本课内容Java抽象窗口工具集(AWT)Java组件和容器常用组件类型布局管理器及其使用抽象窗口工具集(AWT)AWT-AbstractWindow Toolkit GUI-Graphical User InterfaceAWT中定义了多种类和接口,用于在Java Application/Applet中进行GUI设计java程序要显示的GUI组件必须是抽象类Component或MenuComponent的子类java.awt 包java.awt包提供了基本的java程序GUI设计工具。Component/MenuComponentContaine
2、rLayoutManager组件(Component)Java的图形用户界面的最基本组成部分是组件,组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。容 器(Container)容器(Container)实际上是Component的子类,因此容器类对象本身也是一个组件,具有组件的所有性质,另外还具有容纳其它组件和容器的功能。容器类对象可使用方法add()添加组件两种主要的容器类型Window:可自由停泊的顶级窗口Panel:可作为容器容纳其它组件,但不能独立存在,必须被添加到其它容器中(
3、如Window 或 Applet)组件定位Java组件在容器中的位置和尺寸由布局管理器决定如要人工控制组件在容器中的大小位置,可取消布局管理器,然后使用Component类的下述成员方法:setLocation()setSize()setBounds()Frame类Frame类是抽象类Window的子类Frame对象显示效果是一个“窗口”,带有标题和尺寸重置角标默认初始化为不可见的,可使用setVisible(true)方法使之变为可见默认的布局管理器是BorderLayout可使用setLayout()方法改变其默认布局管理器Frame类类继承层次继承层次java.lang.Object|+
4、-java.awt.Component|+-java.awt.Container|+-java.awt.Window|+-java.awt.FrameFrame 应用举例 import java.awt.*;public class TestFrame public static void main(String args)Frame f=new Frame(My First Test);f.setSize(170,100);f.setBackground(Color.blue);f.setVisible(true);Panel类 提供容纳组件的空间 可以采用和所在容器不同的布局管理器 Pan
5、el类的继承层次java.lang.Object|+-java.awt.Component|+-java.awt.Container|+-java.awt.PanelFrameWithPanel应用举例import java.awt.*;public class TestFrameWithPanel public static void main(String args)Frame f=new Frame(MyTest Frame);Panel pan=new Panel();f.setSize(200,200);f.setBackground(Color.blue);f.setLayout(
6、null);/取消布局管理器 pan.setSize(100,100);pan.setBackground(Color.green);f.add(pan);f.setVisible(true);Ex1 参考P10、12页程序,练习Frame与Panel组件的使用,对使用AWT组件创建图形用户界面机制建立初步认识;布局管理器为了使我们生成的图形用户界面具有良好的平台无关性,Java语言中,提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。每个容器都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器。容器布局(Cont
7、ainer Layouts)FlowLayout BorderLayout GridLayout CardLayout GridBagLayout默认布局管理器ComponentContainerWindowPanelFrameDialogAppletBorderLayoutFlowLayoutFlowLayout布局管理器FlowLayout是Panel类的默认布局管理器FlowLayout布局对组件逐行定位,行内从左到右,一行排满后换行默认对齐方式为居中对齐不改变组件的大小,按组件原有尺寸显示组件 可在构造方法中设置不同的组件间距、行距及对齐方式FlowLayout 举例import ja
8、va.awt.*;public class TestFlowLayout public static void main(String args)Frame f=new Frame(Flow Layout);Button button1=new Button(Ok);Button button2=new Button(Open);Button button3=new Button(Close);f.setLayout(new FlowLayout();f.add(button1);f.add(button2);f.add(button3);f.setSize(100,100);f.setVis
9、ible(true);FlowLayout 的构造方法new FlowLayout(FlowLayout.RIGHT,20,40);右对齐,组件之间水平间距20个像素,竖直间距40个像素;new FlowLayout(FlowLayout.LEFT);左对齐,水平和竖直间距为缺省值:5;new FlowLayout();使用缺省的居中对齐方式,水平和竖直间距为缺省值:5;BorderLayout 布局管理器BorderLayout是Frame类的默认布局管理器BorderLayout将整个容器的布局划分成东、西、南、北、中五个区域,组件只能被添加到指定的区域如不指定组件的加入部位,则默认加入到
10、Center区域每个区域只能加入一个组件,如加入多个,则先前加入的组件会被遗弃BorderLayout 布局管理器BorderLayout型布局容器尺寸缩放原则北、南两个区域只能在水平方向缩放(宽度可调整)东、西两个区域只能在垂直方向缩放(高度可调整)中部可在两个方向上缩放North South West Eest CenterBorderLayout举例import java.awt.*;public class TestBorderLayout public static void main(String args)Frame f;f=new Frame(Border Layout);Bu
11、tton bn=new Button(BN);Button bs=new Button(BS);Button bw=new Button(BW);Button be=new Button(BE);Button bc=new Button(BC);f.add(bn,North);f.add(bs,South);f.add(bw,West);f.add(be,East);f.add(bc,Center);f.setSize(200,200);f.setVisible(true);GridLayout 布局管理器GridLayout型布局管理器将布局划分成规则的矩形网格,每个单元格区域大小相等.组件
12、被添加到每个单元格中,先从左到右添满一行后换行,再从上到下.在GridLayout构造方法中指定分割的行数和列数.new GridLayout(3,4);GridLayout举例import java.awt.*;public class TestGridLayout public static void main(String args)Frame f=new Frame(GridLayout Example);Button b1=new Button(b1);Button b2=new Button(b2);Button b3=new Button(b3);Button b4=new Bu
13、tton(b4);Button b5=new Button(b5);Button b6=new Button(b6);f.setLayout(new GridLayout(3,2);f.add(b1);f.add(b2);f.add(b3);f.add(b4);f.add(b5);f.add(b6);f.pack();f.setVisible(true);*CardLayout 布局管理器CardLayout布局管理器能够帮助用户处理两个以至更多的成员共享同一显示空间,就好象一叠卡片摞在一起。注意:在一张卡片中只能显示一个组件,因此可以使用容器嵌套方法显示多个组件。*GridBagLayout
14、 布局管理器AWT中最灵活、最复杂的布局管理器,各组件所占空间可以不相同且灵活规定,参见中文参考书;容器的嵌套使用举例import java.awt.*;public class NestedContainer public static void main(String args)Frame f=new Frame(NestedContainer);Button b0=new Button(display Area);Panel p=new Panel();p.setLayout(new GridLayout(2,2);Button b1=new Button(1);Button b2=ne
15、w Button(2);Button b3=new Button(3);Button b4=new Button(4);p.add(b1);p.add(b2);p.add(b3);p.add(b4);f.add(b0,North);f.add(p,Center);f.pack();f.setVisible(true);Ex2 布局管理器1.参照P18页的例子练习使用FlowLayout布局管理器,要求在布局管理器的构造方法中尝试设置不同的对齐方式并显式指定组件的水平和竖直间距;2.参照P22页的例子练习使用BorderLayout布局管理器,试验不指明加入位置f.add(bs);以及向同一位置
16、加入多个组件的实际效果;3.参照P24页的例子练习使用GridLayout布局管理器,尝试在声明为2*3个GridLayout网格的Frame中加入多于或少于6个组件时程序的运行表现;布局管理器总结(1)FrameFrame是一个顶级窗口。Frame的缺省布局管理器为BorderLayout。PanelPanel无法单独显示,必须添加到某个容器中。Panel的缺省布局管理器为FlowLayout。当把Panel作为一个组件添加到某个容器中后,该Panel仍然可以有自己的布局管理器。因此,可以利用Panel使得BorderLayout中某个区域显示多个组件。布局管理器总结(2)在程序中安排组件的
17、位置和大小时,应注意:容器中的布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件的这些属性。如果试图使用Java语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖。如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为:setLayout(null);AWT 绘图可以在任何Java组件上绘图(通常Canvas和Panel组件更适合用于绘图)每个Java组件都有一个public void paint(Graphics g)方法专门用于绘图目的,每次重画该组件时都自动调用paint方法。每个Java组
18、件都有一个Graphics类型的属性,该属性(对象)真正完成在相应组件上的绘图功能。Graphics类中实现了许多绘图方法:-绘制边框(非填充图形)-填充特定区域-绘制其它形状图形AWT 绘图举例import java.awt.*;public class AWTDrawing private Frame f=new Frame(Hello Out There!);private Panel p=new Panel();public void launchFrame()f.add(p);f.setSize(170,170);f.setBackground(Color.blue);f.setVi
19、sible(true);p.setForeground(Color.red);Graphics g=p.getGraphics();g.drawArc(30,40,50,60,70,80);g.fillArc(30,40,50,60,70,80);public static void main(String args)AWTDrawing guiWindow=new AWTDrawing();guiWindow.launchFrame();AWT 绘图举例import java.awt.*;class SubPanel extends Panelpublic void paint(Graphi
20、cs g)g.drawString(this is a drawing test!,20,20);g.drawLine(30,60,100,120);g.draw3DRect(60,50,70,30,false);public class AWTDrawing2 private Frame f=new Frame(Hello Out There!);private SubPanel p=new SubPanel();public void launchFrame()f.add(p);f.setSize(170,170);f.setBackground(new Color(89,145,145);f.setVisible(true);public static void main(String args)AWTDrawing2 guiWindow=new AWTDrawing2();guiWindow.launchFrame();Ex3编写程序测试Graphics类提供的各种绘图方法,体会AWT绘图功能。