概要

JTabbedPaneのタブ、タブエリア、コンテンツエリアなどを半透明に設定します。

サンプルコード

Color bgc = new Color(110, 110, 0, 100);
Color fgc = new Color(255, 255, 0, 100);
UIManager.put("TabbedPane.shadow",                fgc);
UIManager.put("TabbedPane.darkShadow",            fgc);
UIManager.put("TabbedPane.light",                 fgc);
UIManager.put("TabbedPane.highlight",             fgc);
UIManager.put("TabbedPane.tabAreaBackground",     fgc);
UIManager.put("TabbedPane.unselectedBackground",  fgc);
UIManager.put("TabbedPane.background",            bgc);
UIManager.put("TabbedPane.foreground",            Color.WHITE);
UIManager.put("TabbedPane.focus",                 fgc);
UIManager.put("TabbedPane.contentAreaColor",      fgc);
UIManager.put("TabbedPane.selected",              fgc);
UIManager.put("TabbedPane.selectHighlight",       fgc);
// UIManager.put("TabbedPane.borderHighlightColor",  fgc);
// Maybe typo but defined in MetalTabbedPaneUI
UIManager.put("TabbedPane.borderHightlightColor",  fgc);
View in GitHub: Java, Kotlin

解説

  • UIManager.put(...)を使用して、JTabbedPaneのタブやコンテンツ領域などに半透明の色を設定
  • Swingのコンポーネントは背景色が半透明かどうかを判断して再描画しているわけではないため、例えばマウスカーソルの下の領域を再描画するイベントなどで背景色が重複上書きされて残像が残ったり、次第に色が濃くなる現象などが発生する
  • UIManager.put(...)で半透明になるかどうかはLookAndFeelに依存する
    • NimbusLookAndFeelでは、タブなどが半透明にならない
    • ClassicではないWindowsLookAndFeelでは、半透明にならない
  • TabbedPane.borderHightlightColorTabbedPane.borderHighlightColorの書き間違いだと思うが、MetalTabbedPaneUIではTabbedPane.borderHightlightColorが定義されている

参考リンク

コメント