我正在尝试为 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,border =com.apple.laf.AquaMenuBorder@165262ce,flags=8,maximumSize=, minimumSize=,preferredSize=,desiredLocationX=0, desiredLocationY=0,label=System,lightWeightPopupEnabled=true ,margin=,paintBorder=true] java.lang.错误