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

Swing JTabbedPane 實戰:以 RTTI 動態載入面板取代傳統 CardLayout

     編輯:Java 相關知識

CardLayout 需手動管理卡片切換邏輯,JTabbedPane 內建分頁標籤、鍵盤導航、滾動標籤等功能,開發效率大幅提升。本文解析 Tabbed.java 範例,展示以 RTTI (執行期型別識別) 動態實例化面板的技巧。

核心程式碼結構

public class Tabbed extends JPanel {
    // [標籤文字, 面板 Class 物件]
    static Object[][] panels = {
        { "Felix",      Borders.class },
        { "The Professor", Buttons.class },
        { "Rock Bottom", ButtonGroups.class },
        // ... 更多
    };

    static JPanel makePanel(Class c) {
        String title = c.getName().substring(c.getName().lastIndexOf('.') + 1);
        JPanel p = null;
        try { p = (JPanel) c.newInstance(); } // RTTI 實例化
        catch (Exception e) { e.printStackTrace(); }
        p.setBorder(new TitledBorder(title));
        return p;
    }

    public Tabbed() {
        setLayout(new BorderLayout());
        JTabbedPane tabbed = new JTabbedPane();
        for (Object[] entry : panels)
            tabbed.addTab((String) entry[0], makePanel((Class) entry[1]));
        add(tabbed, BorderLayout.CENTER);
        tabbed.setSelectedIndex(panels.length / 2); // 預設開啟中間分頁
    }
}

關鍵技術點解析

  1. 資料驅動 UI:二維陣列 panels 將「標籤文字」與「面板類別」解耦,新增分頁只需加一行資料,零修改邏輯代碼。
  2. RTTI 動態實例化:Class.newInstance() (已棄用,現代用 clazz.getDeclaredConstructor().newInstance()) 依類別物件建立實例,配合 Class.getName() 取得簡單類名作為邊框標題。
  3. JTabbedPane 核心 API:
    • addTab(String title, Component comp):新增分頁,元件可為任意 JComponent。
    • setSelectedIndex(int) / getSelectedIndex():程式控制當前分頁。
    • 自動處理標籤換行、滾動、鍵盤快捷鍵 (Ctrl+Tab)、工具提示。
  4. 元件需繼承 JPanel:範例慣例所有示範面板皆為 JPanel 子類,確保 makePanel() 強制轉型安全。

CardLayout vs JTabbedPane

特性CardLayoutJTabbedPane
使用者切換方式需自行提供按鈕/選單內建標籤點擊切換
標籤管理無自動佈局、捲動、圖示、工具提示
鍵盤無障礙需自行實作內建 Ctrl+Tab、左/右鍵導航
程式碼量較多 (監聽器+切換邏輯)極少 (資料驅動即可)

現代化改良建議

  • 將 Object[][] 改為 List<TabEntry>,TabEntry 為 record 或 POJO,型別安全。
  • 使用 ServiceLoader 或模組系統自動發現面板實作,完全解耦主程式與示範模組。
  • 搭配 JSplitPane 或 JDesktopPane 實現更複雜的多視圖工作台。

JTabbedPane 是 Swing 中「開箱即用、功能完整」的典範,掌握資料驅動 + RTTI 模式,可快速構建可擴充的多視圖應用。

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