设置JTabbedPane中特定选项卡的可见性

bri*_*ium 3 java swing visibility nullpointerexception jtabbedpane

如何在JTabbedPane隐形中设置一些标签?我尝试过使用JTabbedPane#getTabComponentAt(index).setVisible(false);,但它会抛出一个NullPointerException.我可以禁用选项卡,但不能使它们不可见.

SSCCE:

import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTabbedPane;

public class Main {
    public static void main(String[] args) {
        JTabbedPane tabbedPane = new JTabbedPane();
        tabbedPane.setPreferredSize(new Dimension(400, 100));
        for (int i = 0; i < 7; i++)
            tabbedPane.add("tab " + i, new JLabel("content " + i));

        // this throws a NullPointerException
        tabbedPane.getTabComponentAt(1).setVisible(false);
        // this works
        tabbedPane.setEnabledAt(1, false);

        JFrame frame = new JFrame();
        frame.setContentPane(tabbedPane);
        frame.pack();
        frame.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法找出我做错了什么.

Rob*_*bin 5

查看相应setter的javadoc:

设置负责呈现指定选项卡标题的组件.空值表示JTabbedPane将呈现指定选项卡的标题和/或图标.非null值表示组件将呈现标题,JTabbedPane将不呈现标题和/或图标.

因此,如果您设置了any,则该JTabbedPane#getTabComponentAt(index)方法返回Component用于呈现选项卡的用户,否则它使用标签和/或图标.

不确定是否可以使标签不可见,但确定你可以删除它们并插入它们.这可能是一个可接受的解决方案