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

时间:2009-06-03 00:03:29

标签: java user-interface swing jtabbedpane

我想要一种类似于例如只有至少存在两个选项卡时才会显示可用选项卡列表的Firefox。

我还没找到那样的东西。

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

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

虽然这可能会起作用,但感觉就像是黑客或解决方法......

有更好的主意吗?

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

7 个答案:

答案 0 :(得分: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;  
    }  
});  

答案 1 :(得分:6)

我相信你必须手动完成。显然是it has been done before,但只是作为一个似乎无法使用的系统的一小部分。

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

答案 2 :(得分:6)

您最好只使用CardLayout

答案 3 :(得分:1)

另一种选择是自定义JTabbedPane使用的L& F委托(BasicTabbedPaneUI或WindowsTabbedPaneUI,具体取决于您关注的平台)。这将允许您在仅显示单个选项卡的情况下自定义选项卡式窗格的行为。

这是另一种做事方式,但我会说这是一项非常艰巨的任务,并且迈克尔所做的事情会让你以更少的努力获得你想去的地方。我只想将此作为答案发布,以防您不知道此选项。

答案 4 :(得分:1)

我认为这可以使用标签栏和卡片布局实现,

  • 将标签栏和卡片布局添加到网格包布局中以便它们 自动重新调整大小
  • 标签栏的最大高度应为标签的高度
  • 向标签栏添加一个监听器,以便在单击某些标签时 将切换卡片布局以显示适当的内容
  • 如果标签栏只有一个标签
  • ,则将其隐藏

这应该可以胜任。

答案 5 :(得分:1)

是的,有办法。我花了四个小时在oracle网站上找到: http://docs.oracle.com/javase/7/docs/api/javax/swing/JTabbedPane.html#setTabLayoutPolicy()

只需使用:

//declare
private JTabbedPane editor = new JTabbedPane ();
//construct like this:
editor.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
//just add components and see how it goes.
editor.addTab("", newPanel);

答案 6 :(得分:0)

jTabbedPane1.removeTabAt(0);似乎在initComponents();后起作用