我想知道是否可以测试一下JMenu(而不是JMenuItem)是否被点击。 我尝试向其添加ActionListener,但它似乎无法识别。 我只需要在按下JMenu按钮时执行一个操作,以便在打开该菜单之前更改该菜单的JMenuItems。 欢迎使用所有解决此问题的方法!
谢谢
我想知道是否可以测试一下JMenu(而不是JMenuItem)是否被点击。 我尝试向其添加ActionListener,但它似乎无法识别。 我只需要在按下JMenu按钮时执行一个操作,以便在打开该菜单之前更改该菜单的JMenuItems。 欢迎使用所有解决此问题的方法!
谢谢
MenuListener
来处理JMenu
code
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我认为可以使用MouseListener在JMenu中触发操作,而不需要JMenuItem。
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,只有使用JMenuItem才能这样做。
JMenu
添加一个ActionListener
,但它似乎没有任何效果。当鼠标悬停在JMenu
上时,它会打开其子菜单和菜单项。我认为问题是关于在单击JMenu
时执行额外功能的。 - Hummeling Engineering BV
addMenuListener
吗? - assyliassetEnabled(boolean)
不够吗? - Andrew Thompson