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

Java Swing 入門指南:從 AWT 到 MVC 架構的演進

     編輯:Java 相關知識

什麼是 Swing?

Swing 屬於 JFC(Java Foundation Classes)核心組件之一。JFC 包含 AWT、Swing、無障礙 API、Java 2D 與拖放功能。Swing 的誕生旨在解決 AWT(Abstract Window Toolkit)跨平台移植性差、企業級組件不足的問題。Swing 建立在 AWT 核心之上,JDK 1.2 起內建標準庫。

Swing 的 MVC 變體架構

Swing 內部採用簡化的 MVC(Model-View-Controller)模式:

  • Model:負責儲存組件狀態與資料
  • UI Delegate(View + Controller 合併):負責繪製圖形與事件處理

這種設計讓單一 Model 可對應多個 UI Delegate,極大提升了靈活性與可擴展性。

第一個 Swing 視窗:手寫 vs NetBeans 產生器

手寫版 ToolbarFrame

public class ToolbarFrame extends Frame {
    public ToolbarFrame() {
        super("My Toolbar (Swing)");
        setSize(450, 250);
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

關鍵點:透過匿名內部類繼承 WindowAdapter 並覆寫 windowClosing,註冊給視窗,否則無法正常關閉。

NetBeans 產生器版 ToolbarFrame2

public class ToolbarFrame2 extends javax.swing.JFrame {
    public ToolbarFrame2() {
        initComponents();
    }
    private void initComponents() {
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 400, Short.MAX_VALUE));
        layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 300, Short.MAX_VALUE));
        pack();
    }
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(() -> new ToolbarFrame2().setVisible(true));
    }
}

差異:繼承 JFrame 而非 AWT 的 Frame;使用 GroupLayout 自動佈局;啟動時包裝在 EventQueue.invokeLater 確保 EDT 執行緒安全。

元件與事件處理實戰

新增按鈕

NetBeans 設計檢視會自動產生變數宣告與初始化:

private javax.swing.JButton jButton1;
// 在 initComponents 中
jButton1 = new javax.swing.JButton();

事件監聽機制

所有 Swing 元件皆提供 addActionListener(ActionListener l)。當事件觸發,會回呼 actionPerformed(ActionEvent evt)。NetBeans 可自動產生註冊碼:

jButton1.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
        jButton1ActionPerformed(evt);
    }
});

開發者只需在對應的 jButton1ActionPerformed 方法填入業務邏輯。多按鈕時各自獨立內部類,互不干擾。

效果截圖

手寫版工具列視窗

NetBeans 產生版視窗

延伸閱讀

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