• category: swing folder: ComponentSizeVariant title: NimbusLookAndFeelでJComponentのサイズを変更する tags: [NimbusLookAndFeel, JComponent, Font] author: aterai pubdate: 2014-07-28T00:18:57+09:00 description: NimbusLookAndFeelを使用している場合、クライアントプロパティを設定することでJComponentの表示サイズを変更することが出来ます。 description: NimbusLookAndFeelを使用している場合、コンポーネントの表示サイズをクライアントプロパティ設定で変更可能です。 image: https://lh6.googleusercontent.com/-Uru9Oco4olg/U9T5RHzJ_5I/AAAAAAAACKY/7N7a3Ya3sYw/s800/ComponentSizeVariant.png

概要

NimbusLookAndFeelを使用している場合、クライアントプロパティを設定することでJComponentの表示サイズを変更することが出来ます。 NimbusLookAndFeelを使用している場合、コンポーネントの表示サイズをクライアントプロパティ設定で変更可能です。

サンプルコード

#spanadd
JMenu menu = new JMenu("Resizing a Component");
#spanend
#spanadd
ButtonGroup bg = new ButtonGroup();
#spanend
#spanadd
Stream.of("regular", "mini", "small", "large")
#spanend
    .forEach(cmd -> menu.add(createSizeVariantItem(cmd, bg)));
#spanadd
// ...
#spanend
booleanRenderer.putClientProperty("JComponent.sizeVariant", "mini");
View in GitHub: Java, Kotlin

解説

  • NimbusLookAndFeelを使用している場合、JComponent#putClientProperty("JComponent.sizeVariant", "mini");のようにクライアントプロパティを設定することでコンポーネントの表示サイズが変更可能
    • デフォルトはregular、その他は小さい順にmini, small, largeが設定可能
    • JComponent#updateUI()を実行しないと、更新されない
      • このサンプルでは、SwingUtilities.updateComponentTreeUI(window);で実行
    • コンポーネントにフォントがユーザ指定されている場合は、文字サイズは更新されない
      • このサンプルでは、updateUI()の前に、フォントをjc.setFont(new FontUIResource(jc.getFont()));UIResource化することで回避
  • NimbusLookAndFeelを使用している場合JComponent#putClientProperty("JComponent.sizeVariant", "mini")のようにクライアントプロパティを設定することでコンポーネントの表示サイズが変更可能
    • デフォルトはregular、その他は小さい順にminismalllargeが設定可能
    • JComponent#updateUI()を実行しないと更新されない
      • このサンプルではSwingUtilities.updateComponentTreeUI(window)で実行
    • コンポーネントにフォントがユーザ指定されている場合は文字サイズは更新されない
      • このサンプルではupdateUI()の前にフォントをc.setFont(new FontUIResource(c.getFont()))UIResource化することで回避
    • JTableBooleanRendererが二回目以降変更されない
      • 初回のJCheckBox booleanRenderer = (JCheckBox) table.getDefaultRenderer(Boolean.class); booleanRenderer.putClientProperty("JComponent.sizeVariant", "mini");は、正常に動作しているように見える

参考リンク

コメント