簡體   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