Java Swing 圖形介面開發簡介
阿新 • • 發佈:2019-01-10
1. Swing簡介
Swing 是 Java 為圖形介面應用開發提供的一組工具包,是 Java 基礎類的一部分。
Swing 包含了構建圖形介面(GUI)的各種元件,如: 視窗、標籤、按鈕、文字框等。
Swing 提供了許多比 AWT 更好的螢幕顯示元素,使用純 Java 實現,能夠更好的相容跨平臺執行。
為了和 AWT 元件區分,Swing 元件在javax.swing.*
包下,類名均以 J 開頭,例如: JFrame、JLabel、JButton等。
2. Swing元件
一個 Java 的圖形介面,由各種不同型別的“元素”組成,例如: 視窗、選單欄、對話方塊、標籤、按鈕、文字框等等,這些“元素”統一被稱為 元件
Component
)。
元件按照不同的功能,可分為 頂層容器、中間容器、基本元件。一個簡單視窗的組成,如下層級結構所示:
- 頂層容器
- 選單欄
- 中間容器
- 基本元件
- 基本元件
元件型別的繼承關係:
- 頂層容器 屬於視窗類元件,繼承自
java.awt.Window
; - 中間容器 和 基本元件 繼承自
javax.swing.JComponent
。
(1)頂層容器
頂層容器屬於視窗類元件,可以獨立顯示,一個圖形介面至少需要一個視窗,例如:
# | 元件 | 描述 |
---|---|---|
1 | 一個普通的視窗(絕大多數 Swing 圖形介面程式使用 JFrame 作為頂層容器) |
(2)中間容器
中間容器充當基本元件的載體,不可獨立顯示。中間容器可以新增若干基本元件(也可以巢狀新增中間容器),對容器內的元件進行管理,類似於給各種複雜的元件進行分組管理。最頂層的一箇中間容器必須依託在頂層容器(視窗)內。
常用的中間容器(面板):
特殊的中間容器:
(3)基本元件
基本元件是直接實現人機互動的元件。
常用的簡單的基本元件:
選取器元件:
其他較為複雜的基本元件:
# | 元件 | 描述 |
---|---|---|
2 | JTree | 樹 |
3. 佈局管理器
把 Swing
的各種元件(JComponent
)新增到面板容器中(JPanel
),需要給面板容器指定佈局管理器(LayoutManager
),明確容器(Container
)內的各個元件之間的排列布局方式。
常用的佈局管理器:
# | 佈局管理器 | 描述 |
---|---|---|
1 | 流式佈局,按元件加入的順序,按水平方向排列,排滿一行換下一行繼續排列。 | |
2 | 網格佈局,把Container 按指定行列數分隔出若干網格,每一個網格按順序放置一個控制元件。 |
|
3 | 網格袋佈局,按網格劃分Container ,每個元件可佔用一個或多個網格,可將元件垂直、水平或沿它們的基線對齊。 |
|
4 | 箱式佈局,將Container 中的多個元件按 水平 或 垂直 的方式排列。 |
|
5 | 分組佈局,將元件按層次分組(序列 或 並行),分別確定 元件組 在 水平 和 垂直 方向上的位置。 | |
6 | 卡片佈局,將Container 中的每個元件看作一張卡片,一次只能顯示一張卡片,預設顯示第一張卡片。 |
|
7 | 邊界佈局,把Container 按方位分為 5 個區域(東、西、南、北、中),每個區域放置一個元件。 |
|
8 | 彈性佈局,通過定義元件四條邊的座標位置來實現佈局。 | |
9 | null | 絕對佈局,通過設定元件在Container 中的座標位置來放置元件。 |
4. 程式碼例項: 一個簡單的視窗程式
package com.xiets.swing;
import javax.swing.*;
public class Main {
public static void main(String[] args) {
// 1. 建立一個頂層容器(視窗)
JFrame jf = new JFrame("測試視窗"); // 建立視窗
jf.setSize(250, 250); // 設定視窗大小
jf.setLocationRelativeTo(null); // 把視窗位置設定到螢幕中心
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 當點選視窗的關閉按鈕時退出程式(沒有這一句,程式不會退出)
// 2. 建立中間容器(面板容器)
JPanel panel = new JPanel(); // 建立面板容器,使用預設的佈局管理器
// 3. 建立一個基本元件(按鈕),並新增到 面板容器 中
JButton btn = new JButton("測試按鈕");
panel.add(btn);
// 4. 把 面板容器 作為視窗的內容面板 設定到 視窗
jf.setContentPane(panel);
// 5. 顯示視窗,前面建立的資訊都在記憶體中,通過 jf.setVisible(true) 把記憶體中的視窗顯示在螢幕上。
jf.setVisible(true);
}
}
結果展示: