5

我想知道如何删除我的 JtabbedPane 和我的 JFrame 内容窗格之间以及我的 JTabbedPane 和它的内部 JPanel 之间的边距。我圈出了要删除的边距。绿线在这里显示 jtabbedpane 内的 jpanel 之间的间隙。

我试图查看一些名为setMargin但它在 JTabbedPane 上不存在的方法。我还检查了不同布局(根内容窗格、我的 jpanel 等)上的Hgapand (两者 = 0)。Vgap

所以欢迎任何建议。谢谢。

图片在这里.

我还不能发图片。

4

3 回答 3

7

由外观决定选项卡式窗格内组件周围的空间大小 - 通常它会根据您桌面的默认设置来执行此操作。JTabbedPane 没有设置围绕内部组件的插图的方法。

可以为所有选项卡式窗格全局设置此项(警告:适用于 MetalLookAndFeel,可能也适用于 Windows L&F,可能不适用于不基于 BasicLookAndFeel 的 GTK 或 Nimbus 外观)。这将改变VM 中所有选项卡式窗格的外观:

UIManager.getDefaults().put("TabbedPane.contentBorderInsets", new Insets(0,0,0,0));
UIManager.getDefaults().put("TabbedPane.tabsOverlapBorder", true);

您可能还想确保您的 JTabbedPane 具有 EmptyBorder(0,0,0,0) 并且您放入其中的组件也是如此。

如果这在您的目标桌面上不起作用,则替代方法是

  • 如果您不关心您的选项卡式窗格看起来与本机应用程序选项卡式窗格不同,那么(不愉快的)替代方法是编写您自己的 TabbedPaneUI
  • 将您希望看起来像这样的单个 JTabbedPane 的 UI 委托设置为MetalTabbedPaneUI或其他响应这些属性的UI 委托
于 2011-03-03T17:09:41.217 回答
6

我刚刚遇到了同样的问题,其他人说的似乎都不是一个完整的解决方案,所以我想出了这个:

    import javax.swing.plaf.basic.BasicTabbedPaneUI;

    tabbedPane.setUI(new BasicTabbedPaneUI() {
        private final Insets borderInsets = new Insets(0, 0, 0, 0);
        @Override
        protected void paintContentBorder(Graphics g, int tabPlacement, int selectedIndex) {
        }
        @Override
        protected Insets getContentBorderInsets(int tabPlacement) {
            return borderInsets;
        }
    });

在不覆盖paintContentBorder 方法的情况下,它的工作原理相同,但是这样做可能会使UI 在调整大小或类似情况时稍微更有效率,因为标准似乎委托给了许多其他方法。

在 WindowMaker 中的适用于 Linux 的 Oracle Java 6 u43、带有 Mac Java 6 u37 的 Mac OS X 10.6.7 和带有 Java 7 u07 的 Windows 7 上进行了测试,希望这对某人有所帮助:-)

于 2013-04-08T10:39:28.867 回答
1

通过在 UI 元素上设置边框来添加边距。看看你的边框的设置JTabbedPane

于 2011-03-03T16:49:07.853 回答