概要

JPopupMenuに追加するJSeparatorの高さや長さを変更します。

サンプルコード

popup.add("↓ addSeparator()");
popup.addSeparator();
popup.add("↓ add(new JPopupMenu.Separator()");
popup.add(new JPopupMenu.Separator() {
  @Override public Dimension getPreferredSize() {
    Dimension d = super.getPreferredSize();
    d.height = 4;
    return d;
  }
});
popup.add("↓ JPopupMenu.Separator(): font size 16f");
popup.add(new JPopupMenu.Separator() {
  @Override public Font getFont() {
    return super.getFont().deriveFont(16f);
  }
});
popup.add("↓ PopupMenuSeparator.contentMargins");
popup.add(new JPopupMenu.Separator() {
  @Override public void updateUI() {
    super.updateUI();
    UIDefaults d = new UIDefaults();
    d.put("PopupMenuSeparator.contentMargins", new Insets(3, 0, 3, 0));
    putClientProperty("Nimbus.Overrides", d);
    putClientProperty("Nimbus.Overrides.InheritDefaults", true);
  }
});
View in GitHub: Java, Kotlin

解説

  • add(new JSeparator()
    • new JSeparator()でセパレータを作成してJPopupMenuに追加
    • WindowsLookAndFeelでもJSeparatorの長さはJPopupMenuの幅まで描画される
  • JSeparator(): height = 8
    • new JSeparator()でセパレータを作成してJPopupMenuに追加
    • JSeparator#getPreferredSize()をオーバーライドしてその高さを8pxに拡大
  • addSeparator()
    • JPopupMenu#addSeparator()JPopupMenu固有のセパレータを追加
    • JPopupMenu#add(new JPopupMenu.Separator())と同等
    • WindowsLookAndFeelの場合JSeparatorの長さはメニューアイコンの幅だけ短く描画される
  • JPopupMenu.Separator(): height = 4
    • new JPopupMenu.Separator()JPopupMenu固有のセパレータを作成してJPopupMenuに追加
    • JPopupMenu.Separator#getPreferredSize()をオーバーライドしてその高さを4pxに縮小
  • JPopupMenu.Separator(): font size 16f
    • new JPopupMenu.Separator()JPopupMenu固有のセパレータを作成してJPopupMenuに追加
    • JPopupMenu.Separator#getFont()をオーバーライドしてフォントサイズを16ptに拡大
    • WindowsLookAndFeelの場合JPopupMenu固有のセパレータの推奨サイズはfontHeight / 2 + 2で計算されるのでセパレータの高さが変化する
    • com.sun.java.swing.plaf.windows.WindowsPopupMenuSeparatorUI#getPreferredSize()を参照
  • PopupMenuSeparator.contentMargins
    • NimbusLookAndFeelの場合PopupMenuSeparator.contentMarginsJPopupMenu固有のセパレータのマージンを変更可能
    • このサンプルではnew Insets(3, 0, 3, 0)で上下3pxの余白を追加している

参考リンク

コメント