概要

MetalThemeを変更してJInternalFrameのタイトル文字色やアクティブでない場合のタイトル文字色を変更します。

サンプルコード

MetalLookAndFeel.setCurrentTheme(new OceanTheme() {
  @Override public ColorUIResource getWindowTitleForeground() {
    return new ColorUIResource(Color.RED.brighter());
  }

  @Override public ColorUIResource getWindowTitleInactiveForeground() {
    return new ColorUIResource(Color.ORANGE.darker());
  }
});
View in GitHub: Java, Kotlin

解説

  • MetalLookAndFeel
    • デフォルトではタイトル文字色、非アクティブタイトル文字色ともに黒
    • UIManager.put("InternalFrame.activeTitleForeground", Color.RED)などでの変更は効果がない
    • MetalTheme#getWindowTitleForeground()MetalTheme#getWindowTitleInactiveForeground()をオーバーライドしたMetalThemeMetalLookAndFeel.setCurrentTheme(...)メソッドで設定
      • このサンプルではタイトル文字色を明るい赤色、非アクティブタイトル文字色を暗いオレンジ色に変更
  • BasicLookAndFeelWindowsLookAndFeel
    • デフォルトではタイトル文字色、非アクティブタイトル文字色ともに黒
    • タイトル文字色をUIManager.put("InternalFrame.activeTitleForeground", Color.RED)で変更可能
    • 非アクティブタイトル文字色をUIManager.put("InternalFrame.inactiveTitleForeground", Color.WHITE)で変更可能
      • このサンプルではタイトル文字色を赤色、非アクティブタイトル文字色を白色に変更
  • NimbusLookAndFeel
    • デフォルトではタイトル文字色は黒、非アクティブタイトル文字色は灰色
    • UIManager.put("InternalFrame.activeTitleForeground", Color.RED)などでの変更は効果がない
    • 以下のように作成したUIDefaultsInternalFrameTitlePaneputClientProperty("Nimbus.Overrides", d)で設定してタイトル文字色を変更可能、非アクティブタイトル文字色は変更不可?
      JComponent titleBar = ((BasicInternalFrameUI) getUI()).getNorthPane();
      UIDefaults d = new UIDefaults();
      d.put("InternalFrame:InternalFrameTitlePane[Enabled].textForeground", Color.GREEN);
      // d.put("InternalFrame:InternalFrameTitlePane[Enabled+WindowNotFocused].textForeground", Color.GREEN.darker());
      titleBar.putClientProperty("Nimbus.Overrides", d);
      

参考リンク

コメント