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

Java 在JTabbedPane中设置特定选项卡的可见性,java,swing,nullpointerexception,visibility,jtabbedpane,Java,Swing,Nullpointerexception,Visibility,Jtabbedpane,如何将JTabbedPane中的某些选项卡设置为不可见?我尝试使用JTabbedPane#gettabcomponent(index.setVisible(false)),但它会抛出一个NullPointerException。我可以禁用选项卡,但不能使其不可见 SSCCE: import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTabbedPan

如何将
JTabbedPane
中的某些选项卡设置为不可见?我尝试使用
JTabbedPane#gettabcomponent(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);
    }
}
导入java.awt.Dimension;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JTabbedPane;
公共班机{
公共静态void main(字符串[]args){
JTabbedPane tabbedPane=新的JTabbedPane();
tabbedPane.setPreferredSize(新维度(400100));
对于(int i=0;i<7;i++)
tabbedPane.add(“tab”+i,新JLabel(“content”+i));
//这会引发NullPointerException
tabbedPane.getTabComponentAt(1).setVisible(false);
//这很有效
tabbedPane.setEnabledAt(1,false);
JFrame=新JFrame();
frame.setContentPane(选项卡窗格);
frame.pack();
frame.setVisible(true);
}
}

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

请参阅相应setter的javadoc:

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

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


不确定你是否能让标签隐形,但你肯定能让它们和它们隐形。这可能是一个可以接受的解决方案

感谢您的快速响应。好吧,那似乎不是该方法的预期用途…;)我考虑过删除/插入,我只是认为这可能是一个更干净的解决方案,只是让他们看不见。但是我想我必须删除它们。我必须说,这些方法的命名可能会更好,但简单地说,每个选项卡有两个组件可以检索。“内容”和“选项卡标题”。第一个使用
getComponentAt
检索,后者使用
getTabComponentAt
检索,后者返回
null
,因为通常让
JTabbedPane
处理渲染^^@正是硼。这就解释了为什么您会遇到
NullPointerException
对于延迟接受表示抱歉。谢谢你的回答,这很有帮助。