Java 如何在JTabbedPane中隐藏选项卡式面板?

Java 如何在JTabbedPane中隐藏选项卡式面板?,java,swing,Java,Swing,我有: 我想做的是在出现条件时隐藏选项卡2(例如,不允许用户访问该选项卡式面板) 是的,我知道你能做到: JTabbedPane jtabbedPane = new JTabbedPane(); jTabbedPane.addTab("Tab 1", panel1); jTabbedPane.addTab("Tab 2", panel2); jTabbedPane.addTab("Tab 3", panel3); 这将使它变灰,但是我想完全隐藏它,这样用户甚至不知道它在软件中是可能的。他们甚至

我有:

我想做的是在出现条件时隐藏选项卡2(例如,不允许用户访问该选项卡式面板)

是的,我知道你能做到:

JTabbedPane jtabbedPane = new JTabbedPane();
jTabbedPane.addTab("Tab 1", panel1);
jTabbedPane.addTab("Tab 2", panel2);
jTabbedPane.addTab("Tab 3", panel3);
这将使它变灰,但是我想完全隐藏它,这样用户甚至不知道它在软件中是可能的。他们甚至不应该意识到它的存在

我不想这样做

jtabbedPane.setEnabled(1, false); // disable Tab 2

因为我必须定期删除/添加。

我认为这只能由自定义组件完成


下面是一个api,用于尝试解决方案1:-
为什么不从值1开始x,这样它跳过0,而不是从0开始检查x>1

解决方案2:-[http://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html#tabapi][1]

[1] :使用该链接

解决方案3:-您可以执行类似的操作,但不会绘制选项卡区域

jtabbedPane.remove(1); // remove Tab 2

唯一的方法是在您不想看到它时将其删除,然后在您确实希望它可见时重新添加。

这在我的项目中很有用

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
class Testing { 
public void buildGUI() { 
JTabbedPane tp = new JTabbedPane(); 
tp.addTab("A",getPanel("A")); 
tp.addTab("B",getPanel("B")); 
tp.addTab("C",getPanel("C")); 
tp.setUI(new javax.swing.plaf.metal.MetalTabbedPaneUI(){ 
protected void paintTabArea(Graphics g,int tabPlacement,int selectedIndex){} }); 
JFrame f = new JFrame(); 
f.getContentPane().add(tp); 
f.pack(); 
f.setLocationRelativeTo(null); 
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
f.setVisible(true);
 } 
public JPanel getPanel(String tabText)
 { 
JPanel p = ...

“我想完全删除”但“我不想(使用)
jtabbedPane.remove
”。我想你已经陷入了第二十二条军规的境地。对不起,我的错误,我想说的是隐藏。我已经编辑了这个问题。是否可以避免首先添加选项卡?源代码或jar在哪里?它不是标准JDKIt的一部分,它是一个私有开发人员,而不是一个标准类。问题是如果你覆盖了paintTabA原因是你假设你了解L&F UI管理器(你使用的是默认的Java L&F UI管理器,我不知道——它们看起来不太好)。但是,如果您有自定义标签,或者根据操作系统的不同而有不同的标签,则此代码可能会很快变得非常复杂且无法维护。如果L&F发生更改,这将是一个很难找到的金块。这是可能的,但如果我必须在删除标签和重新添加标签之间进行选择,那么我只会做第一个。
this.TabbedPane.setEnabledAt(1, false);