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
对于延迟接受表示抱歉。谢谢你的回答,这很有帮助。