17

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

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

我最好的主意是手动更改布局:

  • 如果是一个组件,只需将其添加到周围的面板
  • 如果添加了一个组件,请从周围的面板中删除该组件,添加一个 JTabbedPane 并将之前的和新的组件都添加到该窗格中。
  • 如果删除了一个组件并且窗格中只剩下一个组件,请删除窗格并添加包含的组件。

虽然这可能会奏效,但感觉就像是一种黑客攻击或解决方法......

有更好的主意吗?

理想情况下,解决方案应该在 Java 1.5 和 1.6 中都可以工作......但我也很高兴只有 1.6 的解决方案。

4

7 回答 7

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;  
    }  
});  
于 2012-01-17T15:56:44.607 回答
5

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

你的方法对我来说看起来不错。我会像你布置的那样做,并将所有逻辑包装在一个自定义中JComponent,这样它就不会那么老套了。

于 2009-06-03T00:14:27.200 回答
5

您最好只使用CardLayout.

于 2009-06-03T02:42:14.500 回答
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);
于 2012-12-11T17:15:38.860 回答
0

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

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

于 2011-08-01T19:44:17.320 回答
0

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

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

这应该可以完成工作。

于 2011-08-03T18:35:01.367 回答
0

jTabbedPane1.removeTabAt(0);似乎工作后initComponents();

于 2019-03-15T07:33:57.810 回答