[英]java action listener on menu, and not on menu item
我需要启蒙。
如何添加动作actionListener事件绑定到菜单,而不绑定到菜单ITEM这里是演示代码,有效(在menuITEM上)..
menuFileItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
System.out.println("It works");
}
}
);
但是当我尝试相同的,但只是在菜单本身它不起作用!
menuFile.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
System.out.println("Plz work... :( ");
}
}
);
可以将监听器添加到菜单中吗? 我教过听众可以添加到一切。
您可以将ActionListener
添加到JMenu
因为此方法是从AbstractButton
继承的。 (JMenu文档)
JMenu menu = new JMenu("MyMenu");
menu.addActionListener(new ActionListener(){...});
但是,它不打算以这种方式使用: JMenu忽略ActionEvent 。 您应该使用MenuEvent
和MenuListener
。
JMenu menu = new JMenu("MyMenu");
menu.addMenuListener(new 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");
}
});
我使用这个addMouseListener()
,因为当你单击JMenu
,它会将其标记为蓝色并在之后执行该事件。
我认为这就是你想要的效果。
在这里它使用这个代码:我声明:
JMenu jmCadastrar = new JMenu("Cadastrar");
jmCadastrar.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
}
根据之前的答案,我为解决方案添加了一个额外的关键监听器 。
这是一个便利功能:
public static void bind(JMenu menu, ActionListener listener) {
menu.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
listener.actionPerformed(new ActionEvent(e.getSource(), ActionEvent.ACTION_PERFORMED, "Delegate"));
}
});
menu.addMenuKeyListener(new MenuKeyListener() {
@Override
public void menuKeyPressed(MenuKeyEvent e) {
if(e.getKeyCode() != KeyEvent.VK_ENTER){
return;
}
// Find out if the menu is the currently selected menu element
MenuElement[] selectionPath = e.getMenuSelectionManager().getSelectedPath();
// Because the JMenu will open a popup menu, the menu is the penultimate element in the path
if (selectionPath.length < 2) {
return;
}
MenuElement selectedMenu = selectionPath[selectionPath.length - 2];
if (selectedMenu == menu) {
listener.actionPerformed(new ActionEvent(e.getSource(), ActionEvent.ACTION_PERFORMED, "Delegate"));
}
}
@Override
public void menuKeyTyped(MenuKeyEvent e) {}
@Override
public void menuKeyReleased(MenuKeyEvent e) {}
});
}
如果您实例化JMenu类以构建菜单对象,请尝试使用方法addMenuListener()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.