Как я могу изменить это поведение, не расширяя пользовательский интерфейс Swing и не переопределяя его метод рисования с большим количеством копипаста? Обратите внимание, что защищен только javax.swing.plaf.basic.BasicMenuItemUI#paintMenuItem, тогда как javax.swing.plaf.basic.BasicMenuItemUI#paintArrowIcon является частным и не может быть переопределен.
Имейте в виду, что мне нужно, чтобы этот элемент был JMenu, поскольку он может содержать подэлементы. Он динамичен и зависит от данных в базе данных.
Код: Выделить всё
package demos.menu;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import java.awt.Dimension;
public class MenuDemo {
public static void main(String[] args) {
JPanel mainPanel = new JPanel();
mainPanel.setPreferredSize(new Dimension(250, 150));
JFrame frame = new JFrame("Menu Demo");
frame.setJMenuBar(createMenuBar());
frame.setContentPane(mainPanel);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private static JMenuBar createMenuBar() {
JMenuBar menuBar = new JMenuBar();
menuBar.add(createMenu());
return menuBar;
}
private static JMenu createMenu() {
JMenu menu = new JMenu("Menu");
menu.add(createSubMenu());
return menu;
}
private static JMenu createSubMenu() {
JMenu submenu = new JMenu("Submenu");
return submenu;
}
}

Хотя, возможно, имеет смысл отключить меню, если в нем нет элементов, стрелка все равно будет нарисована.

Java 8
Подробнее здесь: https://stackoverflow.com/questions/793 ... mpty-jmenu
Мобильная версия