Я пытаюсь создать собственный пользовательский интерфейс меню для Swing, но сталкиваюсь с ошибкой. У меня есть класс, расширяющий 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");
Затем я продолжаю создавать свой графический интерфейс и устанавливаю L&F (я использую Nimbus для этого приложения). Так кто-нибудь видит, что я делаю неправильно, или есть ли лучший способ сделать то, что я делаю?
РЕДАКТИРОВАТЬ: я получаю ошибку
UIDefaults.getUI() failed: no ComponentUI class for: 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.Error