java - 从 SCROLL_TAB_LAYOUT JTabbedPane 中删除选项卡后,将剩余选项卡滚动至可见

标签 java swing jtabbedpane

在设置了 SCROLL_TAB_LAYOUT 选项卡布局策略的 JTabbedPane 尾部删除单个选项卡后,如何滚动剩余选项卡以使其可见。

默认行为似乎是不执行任何操作 - 用户被迫使用滚动按钮将剩余选项卡带回到 View 中(整个选项卡行变为空)。

如果您在我的示例中反复单击“删除”按钮,您就会明白我的意思。如果删除足够多的选项卡,最终会得到一个空白的选项卡行。

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

换句话说,如何确保从尾部删除后尽可能多的选项卡的可见性?

最佳答案

how do I ensure visibility of as much tabs as possible after removing from tail?

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 组件支持的操作列表。

关于java - 从 SCROLL_TAB_LAYOUT JTabbedPane 中删除选项卡后,将剩余选项卡滚动至可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54461567/

相关文章:

java - JTabbedPane 中的选项卡会影响内容

java - Runtime Exception extends Exception 和 Custom Exception extends from Exception 为什么后一个是编译时异常而另一个不是?

java - 为什么我的 Spring 项目返回 A JSONArray text must start with '[' at 1?

Java - keyPressed 事件未被调用

java - JVM 进程大小和内存堆大小之间的巨大差异

JAVA绘制图形

java - 包含一些 Graphics2D 对象的 JFrame.pack() 会阻止所包含对象的可见性

java - 如何使用 backbone marionette js 获取网格

java - 从 getName() 的结果中刷新选项卡名称

java - JTabbedPane 无法正常工作