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

Java Swing GUI 程式設計入門教學與實作範例

     編輯:Java 相關知識

什麼是 Swing?

Swing 是 Java 提供的輕量級 GUI 元件套件,屬於 Java Foundation Classes (JFC) 一部分。特點如下:

  • 純 Java 實作,跨平台一致性高
  • 提供豐富元件:按鈕、文字欄、表格、樹狀結構、分割面板等
  • 支援可換裝的 Look & Feel(外觀風格)
  • 建構於 AWT 之上,但不依賴原生平台元件

第一個 Swing 程式:Hello World

import javax.swing.*;

public class HelloWorldSwing {
    private static void createAndShowGUI() {
        // 設定預設外觀
        JFrame.setDefaultLookAndFeelDecorated(true);

        // 建立視窗
        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 加入標籤
        JLabel label = new JLabel("Hello World");
        frame.getContentPane().add(label);

        // 顯示視窗
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        // 必須在 EDT (Event Dispatch Thread) 建立 GUI
        SwingUtilities.invokeLater(() -> createAndShowGUI());
    }
}

關鍵點說明

  • SwingUtilities.invokeLater():確保 GUI 建立在事件派發執行緒中,保障執行緒安全
  • frame.pack():自動調整視窗大小以容納所有元件
  • setDefaultCloseOperation(EXIT_ON_CLOSE):關閉視窗時結束程式

實作範例:使用者登入視窗

import javax.swing.*;

public class SwingLoginExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Login Example");
        frame.setSize(350, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setLayout(null); // 使用絕對定位
        frame.add(panel);
        placeComponents(panel);

        frame.setVisible(true);
    }

    private static void placeComponents(JPanel panel) {
        // 帳號標籤與輸入框
        JLabel userLabel = new JLabel("User:");
        userLabel.setBounds(10, 20, 80, 25);
        panel.add(userLabel);

        JTextField userText = new JTextField(20);
        userText.setBounds(100, 20, 165, 25);
        panel.add(userText);

        // 密碼標籤與輸入框(隱藏字元)
        JLabel passwordLabel = new JLabel("Password:");
        passwordLabel.setBounds(10, 50, 80, 25);
        panel.add(passwordLabel);

        JPasswordField passwordText = new JPasswordField(20);
        passwordText.setBounds(100, 50, 165, 25);
        panel.add(passwordText);

        // 登入按鈕
        JButton loginButton = new JButton("login");
        loginButton.setBounds(10, 80, 80, 25);
        panel.add(loginButton);
    }
}

核心元件速查表

元件類別用途常用方法
JFrame主視窗容器setSize、setVisible、setDefaultCloseOperation
JPanel面板容器,可嵌套setLayout、add
JLabel顯示文字/圖片setText、setIcon、setHorizontalAlignment
JTextField單行文字輸入getText、setText、setColumns
JPasswordField密碼輸入(遮罩字元)getPassword、setEchoChar
JButton按鈕addActionListener、setText

版面配置管理員

範例使用 null 版面(絕對定位),實務開發建議使用:

  • FlowLayout:預設,左至右排列
  • BorderLayout:東南西北中五區域
  • GridLayout:網格狀排列
  • BoxLayout:水平/垂直堆疊
  • GridBagLayout:最靈活但較複雜

編譯與執行

javac HelloWorldSwing.java
java HelloWorldSwing

小結

Swing 提供完整的 GUI 開發能力,掌握基本元件、版面配置與事件處理機制,即可開發桌面應用程式。進階主題包含:事件監聽器模式、自訂元件繪製、多執行緒與 SwingWorker、資料綁定與表格模型等。

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