一GUI概述
AWT(Abstract Window Toolkit)包括了很多类和接口,用于Java Application的GUI(Graphics User Interface)编
程。使用AWT所涉及的类一般在java.awt包及其子包中,GUI的各种元素(如:窗口,按钮,文本框等)由Java类来实
现。
Component类和Container类是AWT中的两个核心类。Java的图形用户界面的最基本组成部分是Component类,
Component类及其子类的对象用来描述以图形化的方式显示在屏幕上并能与用户进行交互的GUI元素,例如,一个按
钮,一个标签等。
一般的Component类对象不能独立地显示出来,必须将放在某一的Container类对象中才可以显示出来Container
类是Component抽象的子类,Container子类对象可以容纳别的Component对象。
Component抽象类与Container类:
Container类是Component类的子类,因此Container类的实例对象也可以被当作Component对象添加到其他
Container对象中。有两种常用的Container类的对象:
1)Window类:其对象表示自由停泊的顶级窗口。
2)Panel类:其对象可作为容纳添其它Component对象,但不能独立存在,必须被添加到其它Container对象中
(如Window或Applet)
(1)Component抽象类
Component类对象是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。典型图形用户界面
中的按钮、复选框和滚动条都是组件示例。 Component类是与菜单不相关的AWT组件的抽象超类。还可以直接扩展
类Component来创建一个轻量级组件。轻量级组件是与本机不透明窗口不相关的组件。
Component类的构造方法只有一个:
Component类的常用方法有:
(2)Container类
Container类继承自Component抽象类。
一般的AWT容器对象是一个可包含其他AWT组件的组件。 添加到容器中的组件放在一个列表中。列表的顺序将
定义组件在容器内的正向堆栈顺序。如果将组件添加到容器中时未指定索引,则该索引将被添加到列表尾部(此后它位
于堆栈顺序的底部)。
Container类的构造方法:
Container类常用的方法:
(3)Window类
Window对象是一个没有边界和菜单栏的顶层窗口。窗口的默认布局是BorderLayout。 构造窗口时,它必须拥有
窗体、对话框或其他作为其所有者定义的窗口。
Window类的构造方法;
Window类独有得方法和继承的方法查看API得知。
对于Panel类我们下面详细介绍和使用。
二Frame类的用法
Frame类是Window类的子类,由Frame类或其子类创建的对象为一个窗体。因此它是带有标题和边框的顶层窗
口类。
窗体的大小包括为边框指定的所有区域。边框区域的尺寸可以使用getInsets()方法获得,但是,由于这些尺寸
与平台相关,因此在通过调用pack()方法或show()方法将窗体设置为可显示之前,将无法获得有效的insets值。由于窗
体的总大小包括了边框区,因此边框实际上遮掩了窗体的部分区域,并将可用于在矩形中呈现和/或显示子部件的区域
限制在一个矩形内,该矩形左上角的位置为(insets.left, insets.top),宽度为width-(insets.left + insets.right),长度为
heigh -(insets.top + insets.bottom)。
窗体的默认布局为 BorderLayout。
Frame类的构造方法:
常用的构造方法有下面两个:
1)Frame()
2)Frame(String s)//创建标题栏为字符串s的窗口
Frame类的方法:
常用的方法还有继承而来的方法。这里不再列出。
实例代码:
TestFrame.java源代码:
import java.awt.*; /* 范例名称:Frame应用举例 * 源文件名称:TestFrame.java * 要 点:Frame组件的创建及显示设置 */ public class TestFrame{ public static void main( String args[]){ Frame f = new Frame("我的第一个Java窗体"); f.setLocation(300, 300); f.setSize(677,442); f.setBackground(Color.gray); f.setResizable(false); f.setVisible(true); } }
运行结果:
TestMultiFrame.java源代码:
import java.awt.*; public class TestMultiFrame { public static void main(String args[]){ MyFrame f1 = new MyFrame(100,100,200,200,Color.BLUE); MyFrame f2 = new MyFrame(300,100,200,200,Color.YELLOW); MyFrame f3 = new MyFrame(100,300,200,200,Color.GREEN); MyFrame f4 = new MyFrame(300,300,200,200,Color.MAGENTA); } } class MyFrame extends Frame{ static int id = 0; //构造方法 MyFrame(int x,int y,int w,int h,Color color){ super("MyFrame " + (++id)); setBackground(color); TestMultiFrame(null); setBounds(x,y,w,h); setVisible(true); } }
运行结果:
三Panel类的用法
Panel类是最简单的容器类。应用程序可以将其他组件放在面板提供的空间内,这些组件包括其他面板。面板的
默认布局管理器是FlowLayout布局管理器。Panel对象可以看成可以容纳Component的空间,Panel对象可以拥有自己
的布局管理器。
Panel类的构造方法和独有的方法:
当然继承而来的方法我们不在列出,具体的可以查看API文档。
实例:
TestPanel.java源代码:
import java.awt.*; public class TestPanel{ public static void main(String args[]) { Frame f = new Frame("Java窗体"); Panel p = new Panel(null); f.setLayout(null); f.setBounds(300,300,500,500); f.setBackground(new Color(0,0,102)); p.setBounds(50,50,400,400); p.setBackground(new Color(204,204,255)); f.add(p); f.setVisible(true); } }
运行结果:
TestMultiPanel.java源代码:
import java.awt.*; public class TestMultiPanel { public static void main(String args[]){ new MyFrame2("Java窗体",300,300,600,400); } } class MyFrame2 extends Frame{ private Panel p1,p2,p3,p4; //构造方法 MyFrame2(String s,int x,int y,int w,int h){ super(s); setLayout(null); p1 = new Panel(null); p2 = new Panel(null); p3 = new Panel(null); p4 = new Panel(null); p1.setBounds(0,0,w/2,h/2); p2.setBounds(0,h/2,w/2,h/2); p3.setBounds(w/2,0,w/2,h/2); p4.setBounds(w/2,h/2,w/2,h/2); p1.setBackground(Color.BLUE); p2.setBackground(Color.GREEN); p3.setBackground(Color.YELLOW); p4.setBackground(Color.MAGENTA); add(p1); add(p2); add(p3); add(p4); setBounds(x,y,w,h); setVisible(true); } }
运行结果:
设计一个含有Panel的自定义的Frame类含有,形式如下图:
实例代码:
import java.awt.*; public class CenterPanel { public static void main(String args[]){ new MyFrame3(300,300,400,300,Color.BLUE); } } class MyFrame3 extends Frame{ private Panel p; //构造方法 MyFrame3(int x,int y,int w,int h,Color c){ super("FrameWithPanel"); setLayout(null); setBounds(x,y,w,h); setBackground(c); p = new Panel(null); p.setBounds(w/4,h/4,w/2,h/2); p.setBackground(Color.YELLOW); add(p); setVisible(true); } }
结果如上图所示。