JMenu ActionListener

我想知道你是否可以测试是否点击了JMenu(而不是JMenuItem)。 我尝试添加一个ActionListener,但它似乎没有识别它。 我只需要在按下JMenu按钮时执行操作,这样我就可以在打开时更改该菜单的JMenuItems。 欢迎所有的工作来获得这个结果!

谢谢

  • 对于JMenu使用MenuListener

 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class ActionExample { public ActionExample() { JMenu menu = new JMenu("Menu"); menu.setMnemonic(KeyEvent.VK_M); menu.addMenuListener(new SampleMenuListener()); JMenu menu1 = new JMenu("Tool"); menu1.setMnemonic(KeyEvent.VK_T); menu1.addMenuListener(new SampleMenuListener()); JFrame f = new JFrame("ActionExample"); JMenuBar mb = new JMenuBar(); mb.add(menu); mb.add(menu1); f.setJMenuBar(mb); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { ActionExample actionExample = new ActionExample(); } }); } } class SampleMenuListener implements MenuListener { @Override public void menuSelected(MenuEvent e) { System.out.println("menuSelected"); } @Override public void menuDeselected(MenuEvent e) { System.out.println("menuDeselected"); } @Override public void menuCanceled(MenuEvent e) { System.out.println("menuCanceled"); } } 
  • 对于JMenuItem仅使用ButtonModel

使用JMenu的实例,您无法添加ActionListener,只能使用JMenuItem来执行此操作。