AWT(Abstract WindowToolkit抽象视窗工具组)包括了很多类和接口,用于java.Application的GUI(Graphics User Interface图形用户界面)编程,GUI的各种元素(如:窗口,按钮,文本框等)由java类来实现。使用AWT所涉及的类一般在java.awt包及其子包中
Swing是一个为Java设计的GUI工具包。Swing是JAVA基础类的一部分。Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。Swing提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行,这一点不像AWT。
简单的说:
AWT 是抽象窗口组件工具包,是 java最早的用于编写图形节目应用程序的开发包。
Swing 是为了解决 AWT存在的问题而新开发的包,它以 AWT 为基础的。
Container和Component是AWT中的两个核心类
Component和Container
java的图形用户界面的最基本组成部分是Component,Component类及其子类的对象用来描述以图形化方式显示在屏幕上并能与用户进行交互的GUI元素,例如:一个按钮,一个标签等。
一般的Component对象不能独立的显示出来,必须将“放在”某一的Container对象中才可以显示出来
关系:
Container是Component子类,Container子类对象可以“容纳”别的Component对象,也可以被当做Component对象添加到其他Container对象中
Container对象可使用方法add()向其中添加其他Component对象
有两种常用的Container:
1,Window:其对象表示自由停泊的顶级窗口
2,Panel:其对象可作为容纳其它Component对象,但不能独立存在,必须被添加到其他Container中(如Window或Applet)
Frame:
Frame是Window的子类,由Frame或其子类创建的对象为一个窗体
Frame的常用构造方法:
1,Frame()
2,Frame(String s)创建标题栏为字符串s的窗口
示例:
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); setLayout(null); setBounds(x,y,w,h); setVisible(true); } }
Panel:
Panel对象可以看成可以容纳Component的空间
Panel对象可以拥有自己的布局管理器
示例:
import java.awt.*; public class TestMultiPanel{ public static void main(String args[]){ new MyFrame2("MyFrameWithPanel",300,300,400,300); } } 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); } }
布局管理器:
java语言中,提供了布局管理器类的对象可以管理
1,管理Component在Container中的布局,不必直接设置Component位置和大小
2,每个Container都有一个布局管理器对象,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用相应的布局管理器,调用Container的setLayout方法改变其布局管理器对象。
AWT提供了5种布局管理器类:
1,FlowLayout
2,BorderLayout
3,GridLayout
4,CardLayout
5,GridBagLayout
FlowLayout布局管理器
1,是Panel类的默认布局管理器
2,此布局管理器对组件逐行定位,行内从左到右,一行排满后换行
3,不改变组件的大小,按组件原有尺寸显示组件,可设置不同的组件间距,行距以及对齐方式
4,默认的对齐方式是居中
示例:
import java.awt.*; public class TestFlowLayout2{ public static void main(String args[]){ Frame f=new Frame("Java Frame"); FlowLayout l=new FlowLayout(FlowLayout.CENTER,20,40); f.setLayout(l); f.setLocation(300,400); f.setSize(300,200); f.setBackground(new Color(204,204,255)); for(int i=1;i<=7;i++){ f.add(new Button("Button")); } f.setVisible(true); } }
BorderLayout布局管理器
1,是Frame类的默认布局管理器
2,BorderLayout将整个容器的布局划分成,东(EAST),西(WEST),南(SOUTH),北(NORTH),中(CENTER)五个区域,组件只能被添加到指定的区域
3,如不指定组件的加入部分,则默认加入到CENTER区
4,每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖
5,缩放原则:北南两个区域在水平方向缩放,东西两个区域在垂直方向缩放,中部可在两个方向上缩放
示例:
import java.awt.*; public class TestBorderLayout{ public static void main(String args[]){ Frame f; f=new Frame("Border Layout"); Button 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,BorderLayout.NORTH); f.add(bs,BorderLayout.SOUTH); f.add(bw,BorderLayout.WEST); f.add(be,BorderLayout.EAST); f.add(bc,BorderLayout.CENTER); f.setSize(200,200); f.setVisible(true); } }
GridLayout布局管理器
1,此管理器将控件划分成规定的矩形网格,每个单元格区域大小相等。组件被添加到每个单元格中,先从左到右添满一行后换行,在从上到下
示例:
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 Button("b4"); f.setLayout(new GridLayout(3,2)); f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.pack(); //包起来 f.setVisible(true); } }
布局管理器总结:
1,Frame是一个顶级窗口,Frame的缺省布局管理器为BorderLayout
2,Panel无法单独显示,必须添加到某个容器中。Panel的缺省布局管理器为FlowLayout
3,当把Panel作为一个组件添加到某个容器中后,该Panel仍然可以有自己的布局管理器
4,使用布局管理器时,布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件大小和位置属性,如果视图使用java语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖
5,如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为:setLayout(null)
以上只是对GUI做了简单的介绍,让我们对它有个简单的理解,随着以后的学习不断深入!