• category: swing folder: TabbedPaneTabsOverlapBorder title: JTabbedPaneのコンテナBorderを選択したタブで上書きする tags: [JTabbedPane, UIManager, LookAndFeel, Border] author: aterai pubdate: 2022-11-28T06:14:07+09:00 description: JTabbedPaneのコンテナBorderを選択したタブで上書きするかを設定で切り替えます。 image: https://drive.google.com/uc?id=1sfAb3nfsGQIrtx4cdPc2PJhOF2oqow25

概要

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

サンプルコード

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

参考リンク

コメント