系统:Win10
Java:1.8.0_333
IDEA:2020.3.4
Gitee:https://gitee.com/lijinjiang01/JavaSwing
Swing 是一个用于 Java GUI 编程(图形界面设计)的工具包(类库);换句话说,Java 可以用来开发带界面的 PC 软件,使用到的工具就是 Swing
Swing 使用纯粹的 Java 代码来模拟各种控件(使用 Java 自带的作图函数绘制出各种控件),没有使用本地操作系统的内在方法,所以 Swing 是跨平台的。也正是因为 Swing 的这种特性,人们通常把 Swing 控件称为轻量级控件
AWT(Abstract Window Toolkit,抽象窗口工具)是一套早期的 Java GUI 开发工具,Swing 也是在 AWT 的基础上发展起来的

AWT 的初衷是用来开发小型的图形界面程序,提供的功能较少,诸如剪切板、打印支持、键盘导航、弹出式菜单、滚动窗格等很多重要的功能在 AWT 中都不具备;此外,AWT 发生错误的几率也很高
Java 官方看到了 AWT 的不足,就开始着手开发新的 GUI 类库,以继续占领 Java GUI 开发的市场,这就是后来的 Swing
首先 Swing 弥补了 AWT 的不足,并对 AWT 进行了扩充,几乎支持了所有的常用控件和功能;其次 Swing 包含了构建图形界面(GUI)的各种组件,如: 窗口、标签、按钮、文本框等,而且 Swing 提供了许多比 AWT 更好的屏幕显示元素,使用纯 Java 实现,能够更好的兼容跨平台运行
为了和 AWT 组件区分,Swing 组件在 javax.swing.* 包下,类名均以 J 开头,例如: JFrame、JLabel、JButton 等
为了使生成的图形用户界面具有良好的平台无关性,Java 语言提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式
常用的布局管理器:
| # | 布局管理器 | 描述 |
|---|---|---|
| 1 | FlowLayout | 流式布局,按组件加入的顺序,按水平方向排列,排满一行换下一行继续排列。 |
| 2 | BorderLayout | 边界布局,把Container按方位分为 5 个区域(东、西、南、北、中),每个区域放置一个组件。 |
| 3 | GridLayout | 网格布局,把Container按指定行列数分隔出若干网格,每一个网格按顺序放置一个控件。 |
| 4 | GridBagLayout | 网格袋布局,按网格划分Container,每个组件可占用一个或多个网格,可将组件垂直、水平或沿它们的基线对齐。 |
| 5 | CardLayout | 卡片布局,将Container中的每个组件看作一张卡片,一次只能显示一张卡片,默认显示第一张卡片。 |
| 6 | BoxLayout | 箱式布局,将Container中的多个组件按 水平 或 垂直 的方式排列。 |
| 7 | null | 绝对定位,通过设置组件在Container中的坐标位置来放置组件。 |
一个 Java 的图形界面,由各种不同类型的“元素”组成,例如: 窗口、菜单栏、对话框、标签、按钮、文本框等等,这些“元素”统一被称为 组件(Component)
组件按照不同的功能,可分为 顶层容器、中间容器、基本组件。一个简单窗口的组成,如下层级结构所示:

组件类型的继承关系:
顶层容器 属于窗口类组件,直接继承了AWT 组件,而不是从 JComponent 派生的
中间容器 和 基本组件 继承自 javax.swing.JComponent

顶层容器属于窗口类组件,可以独立显示,一个图形界面至少需要一个窗口,它们分别如下:
| # | 组件 | 描述 |
|---|---|---|
| 1 | JFrame | 一个普通的窗口(绝大多数 Swing 图形界面程序使用 JFrame 作为顶层容器) |
| 2 | JDialog | 对话框 |
| 3 | JWindow | 一个可以显示但没有标题栏或窗口管理按钮的容器 |
| 4 | JApplet | java.applet.Applet 的扩展版,是一种不能单独运行但可嵌入在其他应用程序中的小程序,已过时 |
中间容器充当基本组件的载体,不可独立显示。中间容器可以添加若干基本组件(也可以嵌套添加中间容器),对容器内的组件进行管理,类似于给各种复杂的组件进行分组管理。最顶层的一个中间容器必须依托在顶层容器(窗口)内
常用的中间容器(面板):
| # | 组件 | 描述 |
|---|---|---|
| 1 | JPanel | 一般轻量级面板容器组件 |
| 2 | JScrollPane | 带滚动条的,可以水平和垂直滚动的面板组件 |
| 3 | JSplitPane | 分隔面板 |
| 4 | JTabbedPane | 选项卡面板 |
| 5 | JLayeredPane | 层级面板 |
特殊的中间容器:
| # | 组件 | 描述 |
|---|---|---|
| 1 | JMenuBar | 菜单栏 |
| 2 | JToolBar | 工具栏 |
| 3 | JPopupMenu | 弹出菜单 |
| 4 | JInternalFrame | 内部窗口 |
基本组件是直接实现人机交互的组件。
常用的基本组件:
| # | 组件 | 描述 |
|---|---|---|
| 1 | JLabel | 标签 |
| 2 | JButton | 按钮 |
| 3 | JRadioButton | 单选按钮 |
| 4 | JCheckBox | 复选框 |
| 5 | JToggleButton | 开关按钮 |
| 6 | JTextField | 文本框 |
| 7 | JPasswordField | 密码框 |
| 8 | JTextArea | 文本区域 |
较为复杂的基本组件:
选取器组件:
| # | 组件 | 描述 |
|---|---|---|
| 1 | JFileChooser | 文件选取器 |
| 2 | JColorChooser | 颜色选取器 |