我需要启蒙。
如何添加动作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... :( ");
}
}
);
是否可以将监听器添加到菜单中?我教过的听众可以被添加到一切。
答案 0 :(得分:15)
您可以向ActionListener
添加JMenu
,因为此方法是从AbstractButton
继承的。 (JMenu Documentation)
JMenu menu = new JMenu("MyMenu");
menu.addActionListener(new ActionListener(){...});
但是,它并不打算以这种方式使用:JMenu ignores 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");
}
});
答案 1 :(得分:1)
如果您实例化JMenu类以构建菜单对象,请尝试使用方法addMenuListener()。
答案 2 :(得分:1)
我使用此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);
}
});
}
答案 3 :(得分:1)
根据之前的答案,我在解决方案中添加了一个额外的密钥监听器。
这是一个便利功能:
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) {}
});
}