【问题标题】:JMenu ActionListenerJMenu ActionListener
【发布时间】:2012-04-09 08:50:49
【问题描述】:

我想知道您是否可以测试一下是否单击了 JMenu(不是 JMenuItem)。我尝试向它添加一个 ActionListener ,但它似乎无法识别它。我只需要它在按下 JMenu 按钮时执行一个操作,以便在它打开之前更改该菜单的 JMenuItems。也欢迎所有获得此结果的工作!

谢谢

【问题讨论】:

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

标签: java swing actionlistener jmenu


【解决方案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");
    }
}

【讨论】:

    【解决方案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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多