• 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?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);
    

参考リンク

コメント