首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java Swing 入門:從零構建第一個桌面應用視窗

     編輯:Java 綜合教學

核心代碼(最小化可運行範例)

package zzn;

import javax.swing.*;

public class DemoUI extends JFrame {
    public static void main(String[] args) {
        // 在事件調度執行緒(EDT)中啟動 GUI,確保線程安全
        SwingUtilities.invokeLater(() -> {
            new DemoUI().setVisible(true);
        });
    }

    public DemoUI() {
        setTitle("我的第一個 Swing 視窗");
        setSize(500, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 關閉視窗時退出 JVM
        setLocationRelativeTo(null); // 視窗居中顯示
    }
}

關鍵點解析

  1. 繼承 JFrame: 獲得頂層容器視窗能力(標題欄、邊框、最小化/最大化/關閉按鈕)。
  2. SwingUtilities.invokeLater(): Swing 組件非線程安全,所有 GUI 操作必須在 EDT(Event Dispatch Thread)中執行,否則可能導致界面凍結或繫測異常。
  3. setDefaultCloseOperation(EXIT_ON_CLOSE): 默認僅隱藏視窗(HIDE_ON_CLOSE),需顯式設置為退出程序。
  4. setLocationRelativeTo(null): 讓視窗在螢幕中央顯示,提升用戶體驗。

進階:添加組件與佈局管理

public DemoUI() {
    // ... 前述初始化 ...
    setLayout(new BorderLayout()); // 邊界佈局:北、南、東、西、中

    JLabel label = new JLabel("Hello, Swing!", SwingConstants.CENTER);
    label.setFont(new Font("微軟正黑體", Font.BOLD, 24));
    add(label, BorderLayout.CENTER);

    JButton btn = new JButton("點擊我");
    btn.addActionListener(e -> JOptionPane.showMessageDialog(this, "按鈕被點擊了!"));
    add(btn, BorderLayout.SOUTH);
}

常見佈局管理器速查

佈局管理器特點適用場景
FlowLayout左到右、上到下流式排列簡單工具欄、按鈕組
BorderLayout五大區域(北南東西中)主視窗整體結構
GridLayout規則網格,單元格等大計算機鍵盤、表格式表單
GridBagLayout靈活網格,組件可跨行列複雜表單、儀表板
BoxLayout單行/單列堆疊工具欄、側邊欄

圖片資源載入最佳實踐

// 從 classpath 載入(推薦,打包成 jar 後仍可訪問)
ImageIcon icon = new ImageIcon(getClass().getResource("/images/icon.png"));
JLabel imgLabel = new JLabel(icon);
add(imgLabel, BorderLayout.NORTH);

總結

Swing 雖屬舊世代 GUI 技術,但零依賴、跨平台、成熟穩定,適合快速構建內部工具、教學演示或輕量級桌面應用。掌握「EDT 線程模型、佈局管理器、事件監聽」三大核心,即可輕松上手。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved