本文連結: http://blog.csdn.net/xietansheng/article/details/72814531
Java Swing GUI 圖形界面視窗開發基礎教程,本教程将系統性地詳細介紹 Java Swing 開發中常用的一些元件、布局管理器等相關知識技術,并且每章節都将通過代碼執行個體展示實際應用。
教程總目錄: Java Swing 圖形界面開發(目錄)
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
2.1 頂層容器
頂層容器屬于視窗類元件,可以獨立顯示,一個圖形界面至少需要一個視窗,例如:
# | 元件 | 描述 |
---|---|---|
1 | JFrame | 一個普通的視窗(絕大多數 Swing 圖形界面程式使用 JFrame 作為頂層容器) |
2 | JDialog | 對話框 |
2.2 中間容器
中間容器充當基本元件的載體,不可獨立顯示。中間容器可以添加若幹基本元件(也可以嵌套添加中間容器),對容器内的元件進行管理,類似于給各種複雜的元件進行分組管理。最頂層的一個中間容器必須依托在頂層容器(視窗)内。
常用的中間容器(面闆):
# | 元件 | 描述 |
---|---|---|
1 | JPanel | 一般輕量級面闆容器元件 |
2 | JScrollPane | 帶滾動條的,可以水準和垂直滾動的面闆元件 |
3 | JSplitPane | 分隔面闆 |
4 | JTabbedPane | 頁籤面闆 |
5 | JLayeredPane | 層級面闆 |
特殊的中間容器:
# | 元件 | 描述 |
---|---|---|
1 | JMenuBar | 菜單欄 |
2 | JToolBar | 工具欄 |
3 | JPopupMenu | 彈出菜單 |
4 | JInternalFrame | 内部視窗 |
2.3 基本元件
基本元件是直接實作人機互動的元件。
常用的簡單的基本元件:
# | 元件 | 描述 |
---|---|---|
1 | JLabel | 标簽 |
2 | JButton | 按鈕 |
3 | JRadioButton | 單選按鈕 |
4 | JCheckBox | 複選框 |
5 | JToggleButton | 開關按鈕 |
6 | JTextField | 文本框 |
7 | JPasswordField | 密碼框 |
8 | JTextArea | 文本區域 |
9 | JComboBox | 下拉清單框 |
10 | JList | 清單 |
11 | JProgressBar | 進度條 |
12 | JSlider | 滑塊 |
選取器元件:
# | 元件 | 描述 |
---|---|---|
1 | JFileChooser | 檔案選取器 |
2 | JColorChooser | 顔色選取器 |
其他較為複雜的基本元件:
# | 元件 | 描述 |
---|---|---|
1 | JTable | 表格 |
2 | JTree | 樹 |
3. 布局管理器
把
Swing
的各種元件(
JComponent
)添加到面闆容器中(
JPanel
),需要給面闆容器指定布局管理器(
LayoutManager
),明确容器(
Container
)内的各個元件之間的排列布局方式。
常用的布局管理器:
# | 布局管理器 | 描述 |
---|---|---|
1 | FlowLayout | 流式布局,按元件加入的順序,按水準方向排列,排滿一行換下一行繼續排列。 |
2 | GridLayout | 網格布局,把 按指定行列數分隔出若幹網格,每一個網格按順序放置一個控件。 |
3 | GridBagLayout | 網格袋布局,按網格劃分 ,每個元件可占用一個或多個網格,可将元件垂直、水準或沿它們的基線對齊。 |
4 | BoxLayout | 箱式布局,将 中的多個元件按 水準 或 垂直 的方式排列。 |
5 | GroupLayout | 分組布局,将元件按層次分組(串行 或 并行),分别确定 元件組 在 水準 和 垂直 方向上的位置。 |
6 | CardLayout | 卡片布局,将 中的每個元件看作一張卡片,一次隻能顯示一張卡片,預設顯示第一張卡片。 |
7 | BorderLayout | 邊界布局,把 按方位分為 5 個區域(東、西、南、北、中),每個區域放置一個元件。 |
8 | SpringLayout | 彈性布局,通過定義元件四條邊的坐标位置來實作布局。 |
9 | null | 絕對布局,通過設定元件在 中的坐标位置來放置元件。 |
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);
}
}
結果展示: