概要

NimbusLookAndFeelを適用したJTabbedPaneで二段目以上に存在するタブボーダーの描画をタブコンテンツエリアまで延長するかどうかを変更します。

サンプルコード

// TEST: UIManager.put("TabbedPane.tabRunOverlay", -4);
// UIManager.put("TabbedPane.extendTabsToBase", Boolean.TRUE); // Default
// UIManager.put("TabbedPane.extendTabsToBase", Boolean.FALSE);
JTabbedPane tabbedPane = makeTabbedPane();
UIDefaults d = UIManager.getLookAndFeelDefaults();
d.put("TabbedPane.extendTabsToBase", Boolean.FALSE);
tabbedPane.putClientProperty("Nimbus.Overrides", d);
tabbedPane.putClientProperty("Nimbus.Overrides.InheritDefaults", false);
View in GitHub: Java, Kotlin

解説

  • 上: TabbedPane.extendTabsToBase: true
    • TabbedPane.extendTabsToBaseの設定はSynthLookAndFeelNimbusLookAndFeelでのみ有効でデフォルトはtrue
      • かつ二段目以上に存在するタブだけに影響するのでタブレイアウトがWRAP_TAB_LAYOUTの場合のみ有効
    • UIManager.put("TabbedPane.extendTabsToBase", ...)NimbusLookAndFeelを適用する場合の初期値を変更可能
    • TabbedPane.extendTabsToBasetrueに設定すると、たとえばタブ配置がTOPの場合二段目以上のタブの下辺がタブコンテンツエリアの上辺まで拡張して描画される
      • 拡張されるのは描画のみでマウスカーソルで拡張された領域をクリックしても無視される
  • 下: TabbedPane.extendTabsToBase: false
    • 個別のJTabbedPaneに設定するためUIDefaults#put("TabbedPane.extendTabsToBase", Boolean.FALSE)を上書きしたUIDefaultsJTabbedPane#putClientProperty("Nimbus.Overrides", UIDefaults)で設定している
    • TabbedPane.extendTabsToBasefalseに設定すると、たとえばタブ配置がTOPの場合二段目以上のタブの下辺がタブサイズの位置に描画されてタブコンテンツエリアまでつながらない
      • 上記のスクリーンショットでいうとJSplitPaneタブとJTreeタブの右辺が一直線にはならない
      • デフォルトのJTabbedPaneでは違いが微妙だがUIManager.put("TabbedPane.tabRunOverlay", -4)などでタブランの重なりを逆に広げてみると分かりやすいかもしれない
      • JTabbedPaneのタブ・ランの回転を無効にする

参考リンク

コメント