概要

JTabbedPaneのコンテナBorderを選択したタブで上書きするかを設定で切り替えます。

スクリーンショット

Swing/TabbedPaneTabsOverlapBorder.png

サンプルコード

JTabbedPane tabs = makeTabbedPane();
tabs.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
List<JTabbedPane> list = Arrays.asList(makeTabbedPane(), tabs);

String key = "TabbedPane.tabsOverlapBorder";
JCheckBox check = new JCheckBox(key, UIManager.getBoolean(key)) {
  @Override public void updateUI() {
    super.updateUI();
    boolean b = UIManager.getLookAndFeelDefaults().getBoolean(key);
    setSelected(b);
    UIManager.put(key, b);
    list.forEach(SwingUtilities::updateComponentTreeUI);
  }
};
check.addActionListener(e -> {
  boolean b = ((JCheckBox) e.getSource()).isSelected();
  UIManager.put(key, b);
  list.forEach(SwingUtilities::updateComponentTreeUI);
});
View in GitHub: Java, Kotlin

解説

  • WindowsLookAndFeel
    • デフォルトはTabbedPane.tabsOverlapBorder: trueJTabbedPaneのコンテナBorderを選択したタブで上書きしてコンテナと選択タブが一体化した状態で描画される
    • UIManager.put("TabbedPane.tabsOverlapBorder", false)を設定すると選択タブのサイズが非選択タブと同じサイズまで縮小してコンテナBorderで区切られた状態で描画される
  • Windows Classic
    • デフォルトはTabbedPane.tabsOverlapBorder: falseだが、常にJTabbedPaneのコンテナBorderを選択したタブで上書きしてコンテナと選択タブが一体化した状態で描画される
    • UIManager.put("TabbedPane.tabsOverlapBorder", true)を設定すると、SCROLL_TAB_LAYOUTの場合選択タブのサイズが拡大、WRAP_TAB_LAYOUTの場合タブの右Borderがタブコンテナ内に延長して描画される
  • MetalLookAndFeel
    • デフォルトはTabbedPane.tabsOverlapBorder: falseだが、JTabbedPaneのコンテナBorderを選択したタブで上書きしてコンテナと選択タブが一体化した状態で描画される
    • UIManager.put("TabbedPane.tabsOverlapBorder", true)を設定すると、SCROLL_TAB_LAYOUTの場合選択タブのサイズが拡大されてタブの右側が見切れてしまう
      • WRAP_TAB_LAYOUTの場合、選択タブサイズに変化はない
  • MotifLookAndFeel
    • デフォルトはTabbedPane.tabsOverlapBorder: falseだが、JTabbedPaneのコンテナBorderを選択したタブで上書きしてコンテナと選択タブが一体化した状態で描画される
    • UIManager.put("TabbedPane.tabsOverlapBorder", true)を設定すると、SCROLL_TAB_LAYOUTの場合選択タブの高さが拡大、WRAP_TAB_LAYOUTの場合選択タブサイズに変化はない
  • NimbusLookAndFeelGTKLookAndFeel

参考リンク

コメント