JDK中提供了AWT和Swing两个包,用于GUI(图形用户界面)程序的设计和开发。下面为大家介绍一下用AWT如何进行GUI编程。
一、AWT
AWT中有两个核心的类:组件和容器(Component和Container)。组件就是按钮、文本框…而容器就是一个载体,用来添加组件这些元素。
其中容器又分为 Window 和 Panel。Window 可以显示出来,可以向里面添加按钮等组件,而 Panel 也可以添加组件,但是Panel 不能独立显示,需要添加到 Window 里才可以进行显示。 具体关系如下图
二、Frame
Frame窗体是一个容器,是带有标题和边框的顶层窗口,它常用的构造方法如下:
Frame(String title) :构造一个新的、最初不可见的Frame对象。
Frame(String title) :构造一个新的、最初不可见的、具有指定标题的 Frame 对象。
使用方法如下:
Frame frame = new Frame("这个一个窗口");
构造方法里面的参数用来这是窗体的标题,这个构造方法创建的 Frame 对象最初是不可见的,那么我们使用它的成员方法来设置这个窗体的各种属性,它常用的成员方法如下表所示:
方法 | 说明 |
---|---|
setVisible(Boolean visible) | 用来设置窗体是否可见, true 时窗体可见,false 为不可见 |
setTitle(String title) | 用来设置窗体的标题 |
setResizable(boolean resizable) | 设置窗体是否可以由用户来调整大小 |
setBounds() | 传入四个 int 型数据来设置窗体的在屏幕上显示的位置和窗体大小 |
add() | 向窗体中添加窗体或者组件 |
setBackground(Color.color) | 设置窗体的背景颜色 |
setLayout(LayoutManager mgr) | 设置窗题的布局 |
上面代码的实例方法如下:
import java.awt.*;
public class Demo2 {
public static void main(String[] args) {
Frame frame = new Frame();
frame.setTitle("这是一个窗口");
frame.setResizable(true);
frame.setVisible(true);
frame.setBounds(100, 100, 500, 300);
frame.setBackground(Color.pink);
frame.setLayout(new FlowLayout());
}
}
当你创建一个窗体后会发现关闭不了窗口,解决的方法就是使 Java 程序停止运行,这个时候我们可以对这个窗体添加一个监听事件,用来关闭窗口的事件,代码实现如下:
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Demo2 {
public static void main(String[] args) {
Frame frame = new Frame();
frame.setTitle("这是一个窗口");
frame.setResizable(true);
frame.setVisible(true);
frame.setBounds(100, 100, 500, 300);
frame.setBackground(Color.pink);
frame.setLayout(new FlowLayout());
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0); //正常退出程序
}
});
}
}
通过重写里面的方法来监听关闭的事件。
三、Panel
Panel 类可以看作一个容器来承载各种组件(Component),Panel 类拥有从父类继承来的各种方法,同时也拥有自己的布局管理器。它的构造方法如下:
public Panel():使用默认布局管理器创建新面板。 所有面板的默认布局管理器是FlowLayout类。
public Panel(LayoutManager layout):使用指定的布局管理器创建一个新面板。
具体代码实现如下
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Demo2 {
public static void main(String[] args) {
Frame frame = new Frame();
frame.setTitle("这是一个窗口");
frame.setResizable(true);
frame.setVisible(true);
frame.setBounds(100, 100, 500, 300);
frame.setBackground(Color.pink);
Panel panel = new Panel(null);
panel.setBackground(Color.cyan);
panel.setBounds(0, 0, 400, 200);
frame.add(panel);
frame.setLayout(new FlowLayout());
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
四、布局管理器
1、第一种布局管理器——FlowLayout
这种布局管理器是对组件逐行定位,行内从左到右,一行排满后进行换行,FlowLayout 默认的布局方式的居中对齐。
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Demo2 {
public static void main(String[] args) {
Frame frame = new Frame();
frame.setTitle("这是一个窗口");
frame.setResizable(true);
frame.setVisible(true);
frame.setBounds(100, 100, 500, 300);
frame.setBackground(Color.pink);
Button button0 = new Button("button");
Button button1 = new Button("button");
Button button2 = new Button("button");
frame.setLayout(new FlowLayout());
frame.add(button0);
frame.add(button1);
frame.add(button2);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
效果图为:
2、第二种布局管理器——BorderLayout
这种布局管理器把容器分为东(EAST)西(WEST)南(SOUTH)北(NORTh)中(CENTER)
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Demo2 {
public static void main(String[] args) {
Frame frame = new Frame();
frame.setTitle("这是一个窗口");
frame.setResizable(true);
frame.setVisible(true);
frame.setBounds(100, 100, 500, 300);
frame.setBackground(Color.pink);
Button button0 = new Button("west");
Button button1 = new Button("east");
Button button2 = new Button("north");
Button button3 = new Button("south");
Button button4 = new Button("center");
frame.setLayout(new BorderLayout());
frame.add(button0, BorderLayout.WEST);
frame.add(button1, BorderLayout.EAST);
frame.add(button2, BorderLayout.NORTH);
frame.add(button3, BorderLayout.SOUTH);
frame.add(button4, BorderLayout.CENTER);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
效果图为:
3、第三种布局管理器——GridLayout(表格布局管理器)
这种布局管理器就是设置行和列,然后组件依次进行排序。代码实现如下:
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Demo2 {
public static void main(String[] args) {
Frame frame = new Frame();
frame.setTitle("这是一个窗口");
frame.setResizable(true);
frame.setVisible(true);
frame.setBounds(100, 100, 500, 300);
frame.setBackground(Color.pink);
Button button0 = new Button("button");
Button button1 = new Button("button");
Button button2 = new Button("button");
Button button3 = new Button("button");
Button button4 = new Button("button");
frame.setLayout(new GridLayout(3,2));
frame.add(button0);
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.add(button4);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
效果图如下: