• category: swing folder: InternalFrameTitleAlignment title: JInternalFrameのタイトルを左寄せに変更する tags: [JInternalFrame, NimbusLookAndFeel, LookAndFeel] author: aterai pubdate: 2018-01-08T21:07:11+09:00 description: NimbusLookAndFeelを使用するJInternalFrameのタイトルを左寄せに変更します。 image: https://drive.google.com/uc?export=view&id=1pc7-91VPZY42IsKoQuMfcpg0I90siJvvlQ

概要

NimbusLookAndFeelを使用するJInternalFrameのタイトルを左寄せに変更します。

サンプルコード

UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
UIDefaults def = UIManager.getLookAndFeelDefaults();
def.put("InternalFrame:InternalFrameTitlePane.titleAlignment", "LEADING");
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、UIDefaultsInternalFrame:InternalFrameTitlePane.titleAlignmentキーの値を変更することでNimbusLookAndFeelを使用するJInternalFrameのタイトルを変更しています。

  • メモ
    • TRAILINGで右寄せになる
    • SynthLookAndFeel系でのみ有効
    • JInternalFrame#setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT)を設定すると、各ボタンと合わせて、タイトルの字揃えも逆転する
      • NorthPane#setComponentOrientation(...)は効果がない
    • 個別のJInternalFrameでタイトルの字揃えを変更する場合は、以下のようにJInternalFrame#getUI()で取得したBasicInternalFrameUIからgetNorthPane()でタイトルバーを取得し、putClientProperty("Nimbus.Overrides", ...)で上書きする
    • JInternalFrame#putClientProperty(...)は効果がない
    • この方法でもすべてのJInternalFrameのタイトル字揃えが変更されてしまう場合がある?
      JInternalFrame frame = new JInternalFrame("title", true, true, true, true);
      BasicInternalFrameUI ui = (BasicInternalFrameUI) frame.getUI();
      JComponent titleBar = (JComponent) ui.getNorthPane();
      UIDefaults d = new UIDefaults();
      String titleAlignment = idx == 0 ? "CENTER" : "LEADING";
      d.put("InternalFrame:InternalFrameTitlePane.titleAlignment", titleAlignment);
      titleBar.putClientProperty("Nimbus.Overrides", d);
      

参考リンク

コメント