• category: swing folder: FocusDashedRectGap title: JButtonなどの点線によるフォーカス描画の内余白を変更する tags: [JButton, JToggleButton, JRadioButton, JCheckBox, LookAndFeel, UIManager, Focus] author: aterai pubdate: 2019-11-11T16:45:31+09:00 description: WindowsLookAndFeelなどを適用したJButtonで描画される点線によるフォーカス矩形の内余白を変更します。 image: https://drive.google.com/uc?id=1l5MNuTp7CTOcdF6t6zeqccxU2fJtnU6V

概要

WindowsLookAndFeelなどを適用したJButtonで描画される点線によるフォーカス矩形の内余白を変更します。

サンプルコード

UIManager.put("Button.dashedRectGapX", 5);
UIManager.put("Button.dashedRectGapY", 5);
UIManager.put("Button.dashedRectGapWidth", 10);
UIManager.put("Button.dashedRectGapHeight", 10);
View in GitHub: Java, Kotlin

解説

  • JButton
    • BasicGraphicsUtils.drawDashedRect(g, dashedRectGapX, dashedRectGapY, width - dashedRectGapWidth, height - dashedRectGapHeight);で点線によるフォーカス矩形の内余白を変更可能
    • WindowsLookAndFeelでのデフォルトはdashedRectGapX: 3dashedRectGapY: 3dashedRectGapWidth: 6dashedRectGapHeight: 6
    • MetalLookAndFeelNimbusLookAndFeelなどでは効果なし
    • このサンプルではUIManager.put("Button.margin", new Insets(8, 8, 8, 8))でボタンの内余白を設定しているが、これは点線によるフォーカス矩形の内余白には影響しない
    • dashedRectGapWidthdashedRectGapXの二倍になるよう設定しないとバランスが崩れる
  • JToggleButton
    • ToggleButton.dashedRectGapXなどは存在しないが、Button.dashedRectGapXの値が適用される
  • RadioButton
    • RadioButton.dashedRectGapXなどは存在しない
    • WindowsRadioButtonUIのソースコードではButton.dashedRectGapXの値が読み込まれているが、実際にはどこにも使用されていない
    • htmltd要素にpadding属性を設定すると点線によるフォーカス矩形の内余白を変更可能
      • 例: new JRadioButton("<html><table><td style='padding:1'>JRadioButton...")
  • JCheckBox
    • CheckBox.dashedRectGapXなどは存在しない
    • htmltd要素にpadding属性を設定すると点線によるフォーカス矩形の内余白を変更可能

参考リンク

コメント