Wie kann ich dieses Verhalten ändern, ohne die Benutzeroberfläche von Swing zu erweitern und zu überschreiben? Malmethode mit viel Copy-Paste? Beachten Sie, dass nur javax.swing.plaf.basic.BasicMenuItemUI#paintMenuItem geschützt ist, wohingegen javax.swing.plaf.basic.BasicMenuItemUI#paintArrowIcon privat ist und nicht überschrieben werden kann.
Denken Sie daran, dass das Element ein JMenu sein muss, da es möglicherweise Unterelemente enthält. Es ist dynamisch und hängt von Daten in einer Datenbank ab.
Code: Select all
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