Swing 用の独自のメニュー UI を作成しようとしていますが、エラーが発生します。BasicPopupMenuUI
次のコードを拡張して含むクラスがあります。
public static ComponentUI createUI(JComponent c) {
return new ShadowMenuUI();
}
public Popup getPopup(JPopupMenu popup, int x, int y) {
Popup pp = super.getPopup(popup, x, y);
JPanel panel = (JPanel) popup.getParent();
panel.setBorder(new ShadowBorder(3, 3));
panel.setOpaque(false);
return pp;
}
あなたが疑問に思っているなら、ShadowBorder
私が持っているクラスは、AbstractBorder
私が望むように影を拡張してペイントします. アプリケーションを開始するとき、最初に行うことは
UIManager.put("PopupMenuUI", "ShadowMenuUI");
次に、引き続き GUI を作成し、L&F を設定します (このアプリケーションには Nimbus を使用しています)。
編集:私が得ているエラーは
UIDefaults.getUI() が失敗しました: ComponentUI クラスがありません: javax.swing.JPopupMenu[,0,0,0x0,invalid,layout=javax.swing.plaf. basic.DefaultMenuLayout,alignmentX=0.0,alignmentY=0.0,ボーダー =com.apple.laf.AquaMenuBorder@165262ce,flags=8,maximumSize=, minimumSize=,preferredSize=,desiredLocationX=0, desiredLocationY=0,label=システム,lightWeightPopupEnabled=true 、余白 =、paintBorder = true] java.lang.Error