MenuListener实现,如何检测单击哪个JMenu? [英] MenuListener Implementation, how to detect which JMenu was clicked?

查看:1222
本文介绍了MenuListener实现,如何检测单击哪个JMenu?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我已定义 JMenu JMenuBar ,请执行以下操作:

If I have defined JMenu and JMenuBar like this:

private JMenuBar jMenuBar;
private JMenu jMenu1;

jMenuBar = new JMenuBar();
jMenu1 = new JMenu();
jMenu1.setText("ABOUT");

//and here add a MenuListener so that i can detect when a menu is clicked:
jMenu1.addMenuListener(this);

jMenuBar.add(jMenu1);
setJMenuBar(jMenuBar);


//and here i implement the menulisteners

public void menuSelected(MenuEvent e) {
   //my logic here
}
public void menuDeselected(MenuEvent e) {}
public void menuCanceled(MenuEvent e) {}

现在工作正常。但问题是如果我有一个以上的菜单,我怎么能区分这两个菜单。
在菜单监听器中,我怎么知道点击来自menu1或其他菜单2?

Now it works fine. But the problem is if i have more then one menu, how can i distinguish between the two. Like in the menu listener, how would i know the click came from menu1 or another menu 2?

我的意思是如果我有另一个菜单并且我添加了菜单此菜单的监听器:

I mean if i have another menu and i add menu listener for this menu as well:

jMenu2.addMenuListener(this);

然后我无法区分点击来自哪个菜单。我该怎么做?

then i can not distinguish from which menu the click came from. How can i do that?

推荐答案

你可以使用 getSource() MenuEvent 课程的方法。或者您也可以将两个菜单中的单独监听器添加为匿名类。

You can use getSource() method of MenuEvent class. Or you can also add separate listeners to both menus as anonymous class.

public void menuSelected(MenuEvent e) {
   //Make sure jMenu1 and jMenu2 are accessible in here.
   if(e.getSource()==jMenu1)
      operationForMenu1();
   else if(e.getSource()==jMenu2)
      operationForMenu2();
}

   jMenu1.addMenuListener(new MenuListener() {
        @Override
        public void menuSelected(MenuEvent arg0) {
            // operation here.
        }

        @Override
        public void menuDeselected(MenuEvent arg0) {
        }

        @Override
        public void menuCanceled(MenuEvent arg0) {
        }
    });
    jMenu2.addMenuListener(new MenuListener() {
        @Override
        public void menuSelected(MenuEvent arg0) {
            // operation here.
        }

        @Override
        public void menuDeselected(MenuEvent arg0) {
        }

        @Override
        public void menuCanceled(MenuEvent arg0) {
        }
    });

如果您选择第二个选项,那么它将很容易使用 ActionListener 而不是 MenuListener 。 (仅当您不想对menuCanceled和menuDeselected进行操作时)(在评论中删除@Kleopatra建议)

If you choose second option then it will easy to use ActionListener instead of MenuListener. (Only if you do not want to do operation on menuCanceled and menuDeselected) (removed this as suggested by @Kleopatra in comment)

这篇关于MenuListener实现,如何检测单击哪个JMenu?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆