繁体   English   中英

Java:删除JTabbedPane上的边距/填充

[英]Java: remove margin / padding on a JTabbedPane

我想知道如何删除我的JtabbedPane和我的JFrame内容窗格之间以及我的JTabbedPane和它的内部JPanel之间的边距。 我在想要移除的边缘上空盘旋。 绿线在这里显示jtabbedpane内的jpanel之间的差距。

我试着看一下名为setMargin方法,但它在JTabbedPane上不存在。 我还检查HgapVgap在不同的布局(根内容窗格中,我的JPanel等)(都= 0)。

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

图像就在这里

我还不能发布图片。

根据外观和感觉决定选项卡式窗格内部组件周围的空间大小 - 通常它将根据桌面的默认值执行此操作。 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
  • 设置UI委托单JTabbedPane的你想看起来像这样MetalTabbedPaneUI或其他一些UI委托, 给这些属性响应

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

    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中测试Oracle Java 6 u43 for Linux,在Mac Java 6中使用Mac OS X 10.6.7和使用Java 7 u07测试Windows 7,希望这有助于某人:-)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM