JMenu ActionListener
Posted
技术标签:
【中文标题】JMenu ActionListener【英文标题】: 【发布时间】:2012-04-09 08:50:49 【问题描述】:我想知道您是否可以测试一下是否单击了 JMenu(不是 JMenuItem)。我尝试向它添加一个 ActionListener ,但它似乎无法识别它。我只需要它在按下 JMenu 按钮时执行一个操作,以便在它打开之前更改该菜单的 JMenuItems。也欢迎所有获得此结果的工作!
谢谢
【问题讨论】:
你试过addMenuListener
吗?
不,我现在正在使用 addActionListener 但要补充一点,我遇到了一些问题,但 actionListener 不应该也能正常工作吗?
为什么要更改JMenu click上的菜单项?为什么不在点击之前更改它?您在这里的“用例”是什么?
mre,只适用于 JMenuItems 我需要一个 JMenu 的监听器
Hovercraft,我用它来确定是否启用了某些 JMenuItems,我认为这是一种不使用线程来测试它的简单方法......
【参考方案1】:
对于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
【讨论】:
【参考方案2】:使用 JMenu 的实例,您不能添加 ActionListener,只有使用 JMenuItem 才能做到。
【讨论】:
【参考方案3】:我认为可以在没有 JMenuItem 的情况下使用 MouseListener 在 JMenu 中触发操作。
JMenu myMenu = new JMenu("My menu");
myMenu.addMouseListener(new MouseListener()
@Override
public void mouseClicked(MouseEvent e)
// action here
@Override
public void mousePressed(MouseEvent e)
@Override
public void mouseReleased(MouseEvent e)
@Override
public void mouseEntered(MouseEvent e)
@Override
public void mouseExited(MouseEvent e)
);
menuBar.add(myMenu);
【讨论】:
以上是关于JMenu ActionListener的主要内容,如果未能解决你的问题,请参考以下文章