从SCROLL_TAB_LAYOUT JTabbedPane

时间:2019-01-31 13:21:24

标签: java swing jtabbedpane

在设置了SCROLL_TAB_LAYOUT标签布局策略的情况下,从JTabbedPane的尾部删除单个标签后,如何将剩余的标签滚动到可见的页面。

默认行为似乎是什么都不做-用户被迫使用滚动按钮将其余的选项卡带回到视图中(整个选项卡行变为空)。

如果您在示例中重复单击“删除”按钮,您会明白我的意思。如果删除了足够多的标签,最终您将得到空白的标签行。

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

public class FooTest extends JFrame {

    public FooTest() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        final JTabbedPane tabs = new JTabbedPane();
        tabs.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);        
        add(tabs, BorderLayout.CENTER);

        for (int i = 0; i < 10; i++) {
            tabs.addTab("Long tab name " + i, new JPanel());
            tabs.setSelectedIndex(i);
        }

        JButton button = new JButton("Remove");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (tabs.getTabCount() > 0) {
                    tabs.removeTabAt(tabs.getTabCount() - 1);
                }
            }
        });
        add(button, BorderLayout.PAGE_END);

        setSize(400, 400);
        setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new FooTest().setVisible(true);
            }
        });
    }

}

blank tab row

换句话说,从尾部移开后如何确保尽可能多的标签可见?

1 个答案:

答案 0 :(得分:1)

  

从尾部移开后,如何确保尽可能多的标签可见?

Swing使用Action来执行组件的常用功能。

您可以在删除标签页之后手动调用Action来滚动标签页:

tabs.removeTabAt(tabs.getTabCount() - 1);
ActionMap am = tabs.getActionMap();
Action action = am.get("scrollTabsBackwardAction");
action.actionPerformed(new ActionEvent(tabs, ActionEvent.ACTION_PERFORMED, ""));

查看Key Bindings以获得每个Swing组件所支持的动作列表。