如果只有一个选项卡,有没有办法隐藏JTabbedPane的标签栏?

Hux*_*uxi 17 java user-interface swing jtabbedpane

我想要一个类似于Firefox的行为,其中可用选项卡列表仅在至少存在两个选项卡时才会显示.

我还是找不到那样的东西.

我最好的想法是手动更改布局:

  • 如果是一个组件,只需将其添加到周围的面板即可
  • 如果添加了一个组件,则从周围的面板中删除该组件,添加一个JTabbedPane,然后将该组件添加到该窗格中.
  • 如果删除了某个组件并且该窗格中只剩下一个组件,请删除该窗格并添加所包含的组件.

虽然这可能会工作,感觉就像一个黑客或解决方法......

有什么好主意吗?

理想情况下,解决方案应该适用于Java 1.5和1.6 ......但我也很高兴只有1.6的解决方案.

Bra*_*ace 12

您可以覆盖计算选项卡按钮区域高度的UI方法,在0只有一个选项卡时强制高度:

tabbed_pane.setUI(new BasicTabbedPaneUI() {  
    @Override  
    protected int calculateTabAreaHeight(int tab_placement, int run_count, int max_tab_height) {  
        if (tabbed_pane.getTabCount() > 1)
            return super.calculateTabAreaHeight(tab_placement, run_count, max_tab_height);  
        else  
            return 0;  
    }  
});  
Run Code Online (Sandbox Code Playgroud)

  • 这是可行的,但我的 TabbedPane 上有一个薄薄的彩色顶部边框,该边框在选项卡原来所在的区域被遗漏了。尝试一下并对“paintTabBorder”和“paintTabBackground”进行几乎相同的覆盖解决了问题。 (3认同)

Mic*_*ers 6

我相信你必须手动完成它.显然它以前已经完成,但只是作为一个似乎不可用的系统的一小部分.

你的方法对我来说很好.我会这样做,就像你把它放在一起,并将所有逻辑包装在一个自定义中,JComponent这样它就会感觉不那么hackish.


Eug*_*kov 6

简单地使用你可能会更好CardLayout.