1、AWT是Java的比较旧的开发包,而Swing是Java的新的图形开发包。
2、AWT提供了五种布局管理器:FlowLayout、BorderLayout 、GridLayout、GardLayout、GridBagLayout。
3、FlowLayout是Panel类的默认的布局管理器,FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满换行。
FlowLayout默认的对齐方式是居中。
4、BorderLayout是Frame类默认的布局管理器。
BorderLayout将整个容器的布局划分为东西南北中五个区域,组件只能被添加到指定的区域。如果不指定组件的加入部位,则默认加入到CENTER区。
5、GridLayout布局管理器将空间划分为规则的矩形网络,每个单元格区域大小相等。组件被添加到每个单元格中,先从左到右添满一行后换行,再从上到下。
6、如果语句比较少,逻辑比较简单,不经常变动,则可以使用匿名类。
7、下面是一些简单示例。
(1)显示多个不同背景色的窗口
import java.awt.*;
public class TestGUI {
public static void main(String[] args) {
MyFrame f1 = new MyFrame(400,100,200,200,Color.BLUE);
MyFrame f2 = new MyFrame(600,100,200,200,Color.CYAN);
MyFrame f3 = new MyFrame(400,300,200,200,Color.PINK);
MyFrame f4 = new MyFrame(600,300,200,200,Color.GREEN);
}
}
class MyFrame extends Frame{
static int i = 1;
public MyFrame(int x,int y,int m,int n,Color c){
super("Frame"+(i++));
setBounds(x,y,m,n);
setLayout(null);
setBackground(c);
setVisible(true);
}
}
(2)显示多个不同背景色的Panel
import java.awt.*;
public class TestGUI {
public static void main(String[] args) {
FrameAndPanel fap = new FrameAndPanel(350,160,600,400,"Frame$4Panel");
}
}
class FrameAndPanel extends Frame{
private Panel p1 = null;
private Panel p2 = null;
private Panel p3 = null;
private Panel p4 = null;
public FrameAndPanel(int x,int y,int m,int n,String s){
super(s);
p1 = new Panel(null);
//null表示Panel不带自己的布局管理器
p2 = new Panel(null);
p3 = new Panel(null);
p4 = new Panel(null);
this.setBounds(x, y, m, n);
this.setLayout(null);
p1.setBounds(0,0,m/2,n/2);
p2.setBounds(m/2,0,m/2,n/2);
p3.setBounds(0,n/2,m/2,n/2);
p4.setBounds(m/2,n/2,m/2,n/2);
p1.setBackground(Color.BLUE);
p2.setBackground(Color.PINK);
p3.setBackground(Color.GREEN);
p4.setBackground(Color.CYAN);
this.add(p1);
this.add(p2);
this.add(p3);
this.add(p4);
this.setVisible(true);
}
}
(3)不同布局的简单应用
import java.awt.*;
public class TestGUI {
public static void main(String args[]){
Frame f = new Frame("MyFrame");
f.setBounds(350,160,600,400);
f.setLayout(new GridLayout(2,1));
Panel p1 = new Panel(new BorderLayout());
Panel p2 = new Panel(new BorderLayout());
Panel p11 = new Panel(new GridLayout(2,1));
Panel p21 = new Panel(new GridLayout(2,2));
p11.add(new Button("Button3"));
p11.add(new Button("Button4"));
p21.add(new Button("Button7"));
p21.add(new Button("Button8"));
p21.add(new Button("Button9"));
p21.add(new Button("Button10"));
p1.add(new Button("Button1"),BorderLayout.WEST);
p1.add(new Button("Button2"),BorderLayout.EAST);
p1.add(p11,BorderLayout.CENTER);
p2.add(new Button("Button5"),BorderLayout.WEST);
p2.add(new Button("Button6"),BorderLayout.EAST);
p2.add(p21,BorderLayout.CENTER);
f.add(p1);
f.add(p2);
f.setVisible(true);
}
}
(4)实现A+B=C
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestGUI{
public static void main(String args[]){
new MyFrame();
}
}
class MyFrame extends Frame{
TextField t1,t2,t3;
public MyFrame(){
t1 = new TextField(15);
t2 = new TextField(15);
t3 = new TextField(20);
Button b = new Button("=");
Label l = new Label("+");
add(t1);
add(l);
add(t2);
add(b);
add(t3);
setLocation(430,200);
setLayout(new FlowLayout());
pack();
b.addActionListener(new Monitor(this));
//b.addActionListener(new Monitor(t1,t2,t3));
setVisible(true);
}
}
/*
class Monitor implements ActionListener{
TextField t1,t2,t3;
Monitor(TextField t1,TextField t2,TextField t3){
this.t1 = t1;
this.t2 = t2;
this.t3 = t3;
}
public void actionPerformed(ActionEvent e) {
int num1,num2,num3;
String num;
num1 = Integer.parseInt(t1.getText());
num2 = Integer.parseInt(t2.getText());
num3 = num1 + num2;
//num = Integer.toString(num3);
num = String.valueOf(num3);
t3.setText(num);
}
}
*/
class Monitor implements ActionListener{
MyFrame mf;
Monitor(MyFrame mf){
this.mf = mf;
}
public void actionPerformed(ActionEvent e) {
int num1,num2,num3;
String num;
num1 = Integer.parseInt(mf.t1.getText());
num2 = Integer.parseInt(mf.t2.getText());
num3 = num1 + num2;
//num = Integer.toString(num3);
num = String.valueOf(num3);
mf.t3.setText(num);
mf.t1.setText("");
mf.t2.setText("");
}
}
(5)鼠标事件、窗口事件、键盘事件
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class TestPaint {
public static void main(String[] args) {
new MyFrame();
}
}
class MyFrame extends Frame{
ArrayList points = null;
public MyFrame(){
super("MyFrame");
points = new ArrayList();
this.setBounds(400,160,500,300);
this.setBackground(Color.BLUE);
this.setLayout(null);
this.setVisible(true);
this.addMouseListener(new MouseMonitor());
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
setVisible(false);
System.exit(0);
}
}
);
this.addKeyListener(new KeyMonitor());
}
public void addPoint(Point p){
points.add(p);
}
public void paint(Graphics g){
Iterator i = points.iterator();
Color c = g.getColor();
g.setColor(Color.YELLOW);
Point p = null;
while(i.hasNext()){
p = (Point)i.next();
g.fillOval(p.x,p.y,10,10);
}
g.setColor(c);
}
class MouseMonitor extends MouseAdapter{
public void mousePressed(MouseEvent e){
Point p = new Point(e.getX(),e.getY());
addPoint(p);
repaint();
}
}
}
class KeyMonitor extends KeyAdapter{
public void keyPressed(KeyEvent e){
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_UP){
System.out.println("向上");
}else if(keyCode == KeyEvent.VK_DOWN){
System.out.println("向下");
}else if(keyCode == KeyEvent.VK_LEFT){
System.out.println("向左");
}else if(keyCode == KeyEvent.VK_RIGHT){
System.out.println("向右");
}else{
System.out.println("其他");
}
}
}