• category: swing folder: MetalTheme title: MetalThemeを変更してJInternalFrameのタイトル文字色を変更する tags: [MetalLookAndFeel, MetalTheme, LookAndFeel, JInternalFrame] author: aterai pubdate: 2020-09-21T08:54:04+09:00 description: MetalThemeを変更してJInternalFrameのタイトル文字色やアクティブでない場合のタイトル文字色を変更します。 image: https://drive.google.com/uc?id=1K1v80nthZAQkwu0MLR3fy4BSBpVpSHM6

概要

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.RED)で変更可能
  • 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);
      

参考リンク

コメント