1. 程式人生 > >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

(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);
    }

}

結果展示:

result.png