2009-06-03 65 views
14

我想要一个类似于如果至少有两个选项卡存在,Firefox可用选项卡列表只会显示。如果只有一个选项卡存在,是否有办法隐藏JTabbedPane的选项卡栏?

我还没有找到类似的东西。

我有最好的办法是手动改变的布局:

  • 在一个部件的情况下,只是添加到周围的面板
  • 如果一个组件被添加,从周围的面板删除该组件,改为添加一个JTabbedPane,并将上一个和新组件添加到该窗格。
  • 如果组件被删除,并且窗格中只剩下一个组件,请移除窗格并添加包含的组件。

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

任何更好的主意吗?

理想情况下,解决方案应该同时适用于Java 1.5和1.6 ...但我也很高兴仅使用1.6版解决方案。

回答

5

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

你的方法对我来说很好。我会这样做,就像你把它放在一起,然后把所有的逻辑都包装在自定义的JComponent中,这样它就不会感到恶心了。

+0

我会等待一段时间,看看是否有人检查答案之前有一个绝妙的主意... – Huxi 2009-06-03 04:51:08

+0

我同意@mmyers。如果某人有一个预构建组件来做到这一点,我很确定它是这样工作的。 – banjollity 2009-06-03 08:11:54

+0

谢谢,我想这里真的没有别的办法... – Huxi 2009-06-03 16:29:03

1

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

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

1

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

  • 添加到网格包布局的标签栏和卡片布局,使他们 重新大小自动
  • 最大高度的标签栏应该是标签的高度
  • 一个侦听器添加到标签栏,这样,当某个标签被点击它 将切换卡的布局,以显示相应的内容
  • 隐藏标签栏,如果它只有一个标签

而这应该做的工作。

11

可以覆盖计算选项卡按钮区域的高度,迫使高度0的时候,只有一个选项卡中的UI方法:

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; 
    } 
}); 
相关问题