В соответствии с вариантом использования, который я должен реализовать, в какой-то момент меню должно быть отключено, поэтому в какой-то момент оно не должно быть кликабельным. Имеет смысл просто установить
JMenu menu = new JMenu();
menu.setEnabled(false);
И действительно, это работает в этом примере кода:
public class MenuTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(FrameTest::new);
}
}
class FrameTest extends JFrame {
public FrameTest() {
super();
JPanel panel = new JPanel(new GridBagLayout());
JMenuBar menuBar = new JMenuBar();
JMenu menu1 = new JMenu("test menu1");
JMenu menu2 = new JMenu("test menu2");
menuBar.add(menu1);
menuBar.add(menu2);
menu1.setEnabled(false);
setJMenuBar(menuBar);
setPreferredSize(new Dimension(400, 400));
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
}
Но в кодовой базе, над которой я работаю, этот подход не работает, он оставляет меню включенным, но отключает все инкапсулированные действия. Это не то, что я ищу. По определенным причинам, в основном из-за того, что он довольно большой и сюда не влезет, я его не публикую, но идея та же. JMenuBar
заполнены JMenu
, которые заполнены AbstractActions
. Есть ли причины, по которым результаты отличаются при использовании одного и того же метода setEnabled(false)
в классе JMenu
?