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

Java GUI設計完全入門:Swing核心組件、事件模型與佈局管理實戰

     編輯:Java 程式設計入門

Swing vs AWT:輕量級組件的勝利

AWT為重量級組件,依賴作業系統原生Peer,外觀受平台限制、功能單薄。Swing建構於AWT之上,純Java繪製輕量級組件,跨平台一致、組件豐富(JTable、JTree、JTabbedPane等)、支援Pluggable Look & Feel。嚴禁混用:層級(Z-Order)錯亂導致AWT組件永遠覆蓋Swing組件。

事件驅動核心:監聽器模式

  • 事件源:產生事件的組件(JButton、JFrame等)
  • 事件物件:封裝事件資訊(ActionEvent、WindowEvent、MouseEvent等)
  • 監聽器介面:定義處理方法(ActionListener、WindowListener等)
  • 註冊:source.addXxxListener(listener)

適配器模式簡化代碼:WindowAdapter實作WindowListener所有方法為空,僅覆寫關心事件(如windowClosing、windowActivated)。

視窗基礎:JFrame三步驟

JFrame frame = new JFrame("標題");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 關閉即退出
frame.setSize(400, 300); // 或 frame.pack() 自適應
frame.setVisible(true);  // 顯示

組件必須加入ContentPane:frame.getContentPane().add(component)或frame.add(component)(JDK 5+語法糖)。

四大按鈕家族完整對照

組件狀態監聽器關鍵方法群組管理
JButton無狀態ActionListeneractionPerformed—
JToggleButton按下/彈起ActionListenerisSelected()—
JCheckBox勾選/未勾選ItemListenerisSelected()、itemStateChanged—
JRadioButton單選ActionListenerisSelected()ButtonGroup(單選互斥)

注意:JCheckBox觸發項目事件(ItemEvent),須用ItemListener而非ActionListener。

文字輸入組件

  • JTextField:單行,建構子指定欄寬new JTextField(20),addCaretListener即時監聽游標/內容變化
  • JPasswordField:繼承JTextField,setEchoChar('*')遮罩顯示,getPassword()回傳char[](安全性優於getText())
  • JTextArea:多行,setLineWrap(true)自動換行,不自帶滾動條,必須包裹於JScrollPane

佈局管理器:FlowLayout vs BorderLayout

佈局特性添加語法適用場景
FlowLayout左→右、上→下流式排列,自動換行container.add(comp)簡單表單、工具列
BorderLayout五區域(NORTH/SOUTH/EAST/WEST/CENTER),各限一組件container.add(comp, BorderLayout.CENTER)主視窗整體架構

JPanel組合拳:區域限一組件時,用JPanel(預設FlowLayout)裝載多組件,再將JPanel置入BorderLayout區域。JScrollPane包裹JTextArea解決滾動與佈局衝突。

實戰範例:編輯器雛形

public class EditorFrame extends JFrame {
    public EditorFrame() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        // 北部工具列
        JPanel toolbar = new JPanel(new FlowLayout(FlowLayout.LEFT));
        toolbar.add(new JButton("開啟"));
        toolbar.add(new JButton("儲存"));
        add(toolbar, BorderLayout.NORTH);

        // 中部編輯區
        JTextArea area = new JTextArea();
        area.setLineWrap(true);
        add(new JScrollPane(area), BorderLayout.CENTER);

        pack(); setLocationRelativeTo(null); setVisible(true);
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(EditorFrame::new); // EDT啟動
    }
}

進階學習路線

  1. 模型-視圖-控制器(MVC)在JTable/JTree/JList中的應用
  2. 自訂繪製(paintComponent)、Look & Feel切換
  3. 多執行緒與SwingWorker避免EDT阻塞
  4. JavaFX作為現代替代方案(FXML、Scene Builder、CSS樣式)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved