1. 程式人生 > >JavaSwing_3.4: JTabbedPane(選項卡面板)

JavaSwing_3.4: JTabbedPane(選項卡面板)

1. 概述

JTabbedPane,選項卡面板。它允許使用者通過點選給定標題或圖示的選項卡,在一組元件之間進行切換顯示。

常用構造方法:

/**
 * 參事說明:
 *     tabPlacement: 選項卡標題的位置, 值為 JTabbedPane.TOP、JTabbedPane.BOTTOM、
 *                   JTabbedPane.LEFT 或 JTabbedPane.RIGHT, 預設為 TOP
 *
 *     tabLayoutPolicy: 選項卡位置不能放入所有的選項卡時,放置選項卡的策略,
 *                      值為 JTabbedPane.WRAP_TAB_LAYOUT 或 JTabbedPane.SCROLL_TAB_LAYOUT
 */
JTabbedPane() JTabbedPane(int tabPlacement) JTabbedPane(int tabPlacement, int tabLayoutPolicy)

建立選項卡:

/**
 * 引數說明:
 *     title: 選項卡的標題
 *     icon: 選項卡的圖示
 *     tip: 當滑鼠移到該選項卡時,懸浮提示的文字
 *     component: 選中該選項卡時顯示的內容元件
 */
void addTab(String title, Component component)

void addTab(String title, Icon icon, Component component)

void
addTab(String title, Icon icon, Component component, String tip) /** * 在指定索引位置插入一個選項卡 */ void insertTab(String title, Icon icon, Component component, String tip, int index)

移除選項卡:

// 移除指定位置的選項(下面兩個方法完全一致)
void removeTabAt(int index)
void remove(int index)

// 移除指定內容控制元件的選項卡
void remove(Component component)

// 移除所有選項卡
void removeAll()

選項卡相關操作:

// 設定當前選中的選項卡
void setSelectedIndex(int index)

// 獲取當前選中的選項卡索引
int getSelectedIndex()

// 獲取當前選中的選項卡對應的內容元件
Component getSelectedComponent()

// 設定 index 位置的選項卡的標題
void setTitleAt(int index, String title)

// 設定 index 位置的選項卡的圖示
void setIconAt(int index, Icon icon)

// 設定 index 位置的選項卡是否可用
void setEnabledAt(int index, boolean enabled)

// 將 index 位置的內容元件設定為 component
void setComponentAt(int index, Component component)

// 獲取選項卡的數量
int getTabCount()

/**
 * 自定義選項卡標題位置的元件, 這裡的 titleComponent 將放到選項卡標題位置。
 * 應用場景: 例如, 在選項卡標題位置新增一個關閉按鈕, 點選按鈕移除選項卡。
 */
void setTabComponentAt(int index, Component titleComponent)

狀態監聽器:

// 新增選項卡選中狀態改變的監聽器
void addChangeListener(ChangeListener l)

2. 程式碼例項

package com.xiets.demo;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;

public class Main {

    public static void main(String[] args) {
        JFrame jf = new JFrame("測試視窗");
        jf.setSize(300, 300);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jf.setLocationRelativeTo(null);

        // 建立選項卡面板
        final JTabbedPane tabbedPane = new JTabbedPane();


        // 建立第 1 個選項卡(選項卡只包含 標題)
        tabbedPane.addTab("Tab01", createTextPanel("TAB 01"));

        // 建立第 2 個選項卡(選項卡包含 標題 和 圖示)
        tabbedPane.addTab("Tab02", new ImageIcon("bb.jpg"), createTextPanel("TAB 02"));

        // 建立第 3 個選項卡(選項卡包含 標題、圖示 和 tip提示)
        tabbedPane.addTab("Tab03", new ImageIcon("bb.jpg"), createTextPanel("TAB 03"), "This is a tab.");


        // 新增選項卡選中狀態改變的監聽器
        tabbedPane.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                System.out.println("當前選中的選項卡: " + tabbedPane.getSelectedIndex());
            }
        });

        // 設定預設選中的選項卡
        tabbedPane.setSelectedIndex(1);

        jf.setContentPane(tabbedPane);
        jf.setVisible(true);
    }

    /**
     * 建立一個面板,面板中心顯示一個標籤,用於表示某個選項卡需要顯示的內容
     */
    private static JComponent createTextPanel(String text) {
        // 建立面板, 使用一個 1 行 1 列的網格佈局(為了讓標籤的寬高自動撐滿面板)
        JPanel panel = new JPanel(new GridLayout(1, 1));

        // 建立標籤
        JLabel label = new JLabel(text);
        label.setFont(new Font(null, Font.PLAIN, 50));
        label.setHorizontalAlignment(SwingConstants.CENTER);

        // 新增標籤到面板
        panel.add(label);

        return panel;
    }

}

結果展示:

result.gif

PS: 測試的截圖是在 MAC OS X 環境下執行的截圖,該元件在 Windows 環境下的顯示效果可能有較大差別。