问题 JMenu ActionListener


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

谢谢


10702
2018-03-25 17:06


起源

你有没有尝试过 addMenuListener? - assylias
不,我现在正在使用addActionListener,但是为了补充说我遇到了一些问题,不应该在actionListener工作吗? - clankfan1
为什么要更改JMenu上的菜单项?为什么不在点击之前改变它?你的“用例”在这里是什么? - Hovercraft Full Of Eels
mre,这只适用于JMenuItems我需要一个JMenu的监听器 - clankfan1
Hovercraft,我用它来确定某些JMenuItems是否已启用,我认为这是一种不使用线程来测试它的简单方法...... - clankfan1


答案:


  • 对于 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");
    }
}

12
2018-03-25 18:35





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


0
2018-01-23 18:52