AWT 架构、组件与容器详解
一、AWT 整体架构
AWT(Abstract Window Toolkit)是 Java 最早的 GUI 框架,采用分层架构:
- 本地层:通过 Java 本地接口(JNI)调用操作系统原生 GUI 组件
- 抽象层:定义平台无关的 GUI 组件接口
- 应用层:开发者使用的 Java API
核心类关系:
Object
└── Component(所有可视组件的基类)
├── Button, Label, TextField...(基本组件)
└── Container(容器基类)
├── Panel(通用容器)
└── Window
├── Frame(主窗口)
└── Dialog(对话框)
二、核心组件与容器
-
基础组件:
Button
:按钮Label
:文本标签TextField
:单行文本框TextArea
:多行文本域Checkbox
:复选框Choice
:下拉列表
-
容器类型:
Panel
:轻量级容器,必须嵌入 WindowFrame
:带标题栏的主窗口(含系统菜单)Dialog
:模态/非模态对话框ScrollPane
:带滚动条的容器
三、布局管理器
控制容器内组件的排列方式:
- BorderLayout(边界布局)
frame.add(btnNorth, BorderLayout.NORTH); frame.add(btnCenter, BorderLayout.CENTER);
- FlowLayout(流式布局,默认)
panel.setLayout(new FlowLayout()); panel.add(btn1); // 从左到右顺序排列
- GridLayout(网格布局)
panel.setLayout(new GridLayout(2, 3)); // 2行3列
- GridBagLayout(灵活网格布局)
- CardLayout(卡片式布局)
四、代码示例
import java.awt.*;
public class AWTExample extends Frame {
public AWTExample() {
// 1. 设置窗口属性
setTitle("AWT示例");
setSize(400, 300);
// 2. 创建容器和布局
Panel mainPanel = new Panel();
mainPanel.setLayout(new BorderLayout());
// 3. 添加组件
Button northBtn = new Button("北");
Button centerBtn = new Button("中心");
TextField input = new TextField(20);
mainPanel.add(northBtn, BorderLayout.NORTH);
mainPanel.add(centerBtn, BorderLayout.CENTER);
mainPanel.add(input, BorderLayout.SOUTH);
// 4. 添加面板到窗口
add(mainPanel);
// 5. 窗口事件处理
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
new AWTExample().setVisible(true);
}
}
五、AWT 与 Swing/JavaFX 对比
特性 | AWT | Swing | JavaFX |
---|---|---|---|
组件类型 | 重量级 | 轻量级 | 轻量级 |
渲染方式 | 本地渲染 | 纯Java渲染 | GPU加速渲染 |
组件外观 | 依赖OS | 可换肤 | CSS样式支持 |
事件处理 | 基础事件模型 | 增强事件模型 | 事件总线 |
推荐使用场景 | 简单工具 | 桌面应用 | 富媒体应用 |
注意:AWT组件在不同操作系统上会有外观差异,这是其重量级特性的体现。