Java如何滚动或包装JTabbedPane选项卡布局?

JTabbedPane的“组件”标签布局策略可以设置为JTabbedPane.SCROLL_TAB_LAYOUT或JTabbedPane.WRAP_TAB_LAYOUT。如果无法一次性显示选项卡,则此布局策略将控制选项卡的显示。默认情况下,布局策略设置为JTabbedPane.WRAP_TAB_LAYOUT。更改选项卡布局策略以JTabbedPane.SCROLL_TAB_LAYOUT使选项卡可滚动。在选项卡式窗格中将显示一个用于左右滚动或上下滚动的按钮。

package org.nhooo.example.swing;

import javax.swing.*;
import java.awt.*;

public class TabbedPaneTabLayoutPolicy extends JPanel {
    public TabbedPaneTabLayoutPolicy() {
        initializeUI();
    }

    public static void showFrame() {
        JPanel panel = new TabbedPaneTabLayoutPolicy();
        panel.setOpaque(true);

        JFrame frame = new JFrame("TabbedPane Tab Layout Policy Demo");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setContentPane(panel);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                TabbedPaneTabLayoutPolicy.showFrame();
            }
        });
    }

    private void initializeUI() {
        this.setLayout(new BorderLayout());
        this.setPreferredSize(new Dimension(400, 200));

        // 使用滚动标签布局策略创建一个JTabbedPane
        JTabbedPane pane = new JTabbedPane(JTabbedPane.TOP,
            JTabbedPane.SCROLL_TAB_LAYOUT);
        pane.addTab("One", createPanel("One"));
        pane.addTab("Two", createPanel("Two"));
        pane.addTab("Three", createPanel("Three"));
        pane.addTab("Four", createPanel("Four"));
        pane.addTab("Five", createPanel("Five"));
        pane.addTab("Six", createPanel("Six"));
        pane.addTab("Seven", createPanel("Seven"));
        pane.addTab("Eight", createPanel("Eight"));
        pane.addTab("Nine", createPanel("Nine"));
        pane.addTab("Ten", createPanel("Ten"));

        this.add(pane, BorderLayout.CENTER);
    }

    private JPanel createPanel(String title) {
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.add(new JLabel(title), BorderLayout.NORTH);
        return panel;
    }
}

这是上面创建的代码片段的屏幕截图。您可以看到在选项卡式窗格的右上方添加了一个按钮,以便您可以滚动浏览隐藏的选项卡。