概要

JTabbedPaneのタブエリア余白を取得、変更するテストを行います。

サンプルコード

UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
UIDefaults d = UIManager.getLookAndFeelDefaults();
// d.put("TabbedPane:TabbedPaneContent.contentMargins", new Insets(0, 5, 5, 5));
// d.put("TabbedPane:TabbedPaneTab.contentMargins", new Insets(2, 8, 3, 8));
// d.put("TabbedPane:TabbedPaneTabArea.contentMargins", new Insets(3, 10, 4, 10));
Insets i = d.getInsets("TabbedPane:TabbedPaneTabArea.contentMargins");
d.put("TabbedPane:TabbedPaneTabArea.contentMargins", new Insets(i.top, 0, i.bottom, 0));
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、NimbusLookAndFeelを設定したJTabbedPaneのタブエリア余白を設定するテストを行っています。

  • 上:
    • すべてのJTabbedPaneのタブエリア左右の余白を0にして除去
    • UIManager.getLookAndFeelDefaults()で取得したUIDefaultsUIDefaults#put("TabbedPane:TabbedPaneTabArea.contentMargins", new Insets(i.top, 0, i.bottom, 0))ですべてのJTabbedPaneのタブエリアの余白を上書き
  • 下:
    • 指定したJTabbedPaneのタブエリア左右の余白を30に拡大
    • new UIDefaults()で生成したUIDefaultsUIDefaults#put("TabbedPane:TabbedPaneTabArea.contentMargins", new Insets(3, 30, 4, 30))でタブエリアの余白を設定し、putClientProperty("Nimbus.Overrides", d)メソッドで特定のJTabbedPaneのタブエリア余白を上書き
      UIDefaults d = new UIDefaults();
      d.put("TabbedPane:TabbedPaneTabArea.contentMargins", new Insets(3, 30, 4, 30));
      tabbedPane.putClientProperty("Nimbus.Overrides", d);
      tabbedPane.putClientProperty("Nimbus.Overrides.InheritDefaults", true);
      

  • MetalLookAndFeelWindowsLookAndFeelなどでタブエリア余白を設定する場合は、UIManager.put("TabbedPane.tabAreaInsets", new Insets(...))が使用可能
  • LookAndFeelによってタブエリアの余白を取得可能な方法が異なるので注意が必要
    // MetalLookAndFeelなどではnullになる
    // UIDefaults d = UIManager.getLookAndFeelDefaults();
    // Insets i = d.getInsets("TabbedPane:TabbedPaneTabArea.contentMargins");
    
    // NimbusLookAndFeelなどではnullになる
    Insets insets = UIManager.getInsets("TabbedPane.tabAreaInsets");
    if (Objects.nonNull(insets)) {
      return insets;
    } else {
      // MetalLookAndFeelなどでは使用できない
      SynthStyle style = SynthLookAndFeel.getStyle(this, Region.TABBED_PANE_TAB_AREA);
      SynthContext context = new SynthContext(this, Region.TABBED_PANE_TAB_AREA, style, SynthConstants.ENABLED);
      return style.getInsets(context, null);
    }
    

参考リンク

コメント