如何隐藏JTabbedPane中的选项卡面板?

4

我有:

JTabbedPane jtabbedPane = new JTabbedPane();
jTabbedPane.addTab("Tab 1", panel1);
jTabbedPane.addTab("Tab 2", panel2);
jTabbedPane.addTab("Tab 3", panel3);

我想要做的是,当某个条件发生时(比如用户没有权限访问该选项卡面板),隐藏选项卡2。

是的,我知道你可以这样做:

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

这将把它变成灰色,但我希望完全隐藏它,以至于用户甚至不知道在软件中存在这个可能性。他们不应该甚至知道它的存在。

我不想做的是:

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

因为我经常需要删除/添加。


1
"我想要完全删除,但我不想使用 jtabbedPane.remove。" "我觉得你陷入了进退两难的境地。" - MadProgrammer
抱歉我的错误,我想说的是隐藏。我已经编辑了这个问题。 - Stephane Grenier
1
能不能一开始就避免添加制表符呢? - Guillaume Polet
4个回答

4
唯一的方法是在您不想查看时将其删除,当您需要可见时再重新添加它。

2

这在我的项目中运作良好。

this.TabbedPane.setEnabledAt(1, false);

0

解决方案1:为什么不将x的值从1开始,这样就跳过了0,而不是从0开始检查x>1...

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

[1]: http://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html#tabapi 使用该链接。

解决方案3:- 您可以像这样做,只需不绘制tabArea即可

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 = ...

问题在于,如果你重写了paintTabArea方法,就假设你知道L&F(外观和感觉)UI管理器(你正在使用默认的Java L&F UI管理器,而我不是——它们看起来不太好)。然而,如果你有自定义的UI管理器,或者根据操作系统不同有不同的UI管理器,这段代码很快就会变得非常复杂和难以维护。如果L&F被更改,那将是一个难以找到的困难点。虽然有可能实现,但如果我必须选择在删除选项卡并重新添加它们之间,我会选择前者。 - Stephane Grenier

0

我认为只有通过自定义组件才能完成这个任务。

这里有一个 HideableTabbedPane 的 API,可以试一下。


源代码或jar包在哪里?它不是标准JDK的一部分。 - Stephane Grenier
这是一个私有开发者,而不是标准类。 - Mordechai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接