Swing/TranslucentTabbedPane の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/TranslucentTabbedPane へ行く。
- Swing/TranslucentTabbedPane の差分を削除
--- category: swing folder: TranslucentTabbedPane title: JTabbedPaneのタブなどを半透明にする tags: [JTabbedPane, UIManager, LookAndFeel] author: aterai pubdate: 2016-03-14T00:04:15+09:00 description: JTabbedPaneのタブ、タブエリア、コンテンツエリアなどを半透明に設定します。 image: https://lh3.googleusercontent.com/-GLtzHl48JaY/VuWAq1hSxSI/AAAAAAAAOQk/HbrQluUnNH8_5fTM2gOIHhcoJMU21hmEgCCo/s800-Ic42/TranslucentTabbedPane.png --- * 概要 [#summary] `JTabbedPane`のタブ、タブエリア、コンテンツエリアなどを半透明に設定します。 #download(https://lh3.googleusercontent.com/-GLtzHl48JaY/VuWAq1hSxSI/AAAAAAAAOQk/HbrQluUnNH8_5fTM2gOIHhcoJMU21hmEgCCo/s800-Ic42/TranslucentTabbedPane.png) * サンプルコード [#sourcecode] #code(link){{ 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); 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); UIManager.put("TabbedPane.borderHightlightColor", fgc); }} * 解説 [#explanation] - `UIManager.put(...)`を使用して、`JTabbedPane`のタブやコンテンツ領域などに半透明の色を設定 - `Swing`のコンポーネントは背景色が半透明かどうかを判断して再描画しているわけではないため、例えばマウスカーソルの下の領域を再描画するイベントなどで背景色が重複上書きされて残像が残ったり、次第に色が濃くなる現象などが発生する -- 半透明色で全体を再描画するように`JPanel#paintComponent(...)`をオーバーライドしたコンポーネントを挟んで回避する必要がある -- [https://tips4java.wordpress.com/2009/05/31/backgrounds-with-transparency/ Backgrounds With Transparency « Java Tips Weblog] -- [[JFrameの透明化と再描画>Swing/TranslucentFrameRepaint]] - `UIManager.put(...)`で半透明になるかどうかは`LookAndFeel`に依存する -- `NimbusLookAndFeel`では、タブなどが半透明にならない -- `Classic`ではない`WindowsLookAndFeel`では、半透明にならない -- `NimbusLookAndFeel`ではタブなどが半透明にならない -- `Classic`ではない`WindowsLookAndFeel`では半透明にならない - `TabbedPane.borderHightlightColor`は`TabbedPane.borderHighlightColor`の書き間違いだと思うが、`MetalTabbedPaneUI`では`TabbedPane.borderHightlightColor`が定義されている * 参考リンク [#reference] - [https://tips4java.wordpress.com/2009/05/31/backgrounds-with-transparency/ Backgrounds With Transparency « Java Tips Weblog] - [[JTabbedPaneのタブエリア背景色などをテスト>Swing/TabAreaBackground]] * コメント [#comment] #comment #comment