MenuListener实现,如何检测单击哪个JMenu? [英] MenuListener Implementation, how to detect which JMenu was clicked?
问题描述
如果我已定义 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) {
}
});
如果您选择第二个选项,那么它将很容易使用(在评论中删除@Kleopatra建议) ActionListener
而不是 MenuListener
。 (仅当您不想对menuCanceled和menuDeselected进行操作时)
If you choose second option then it will easy to use (removed this as suggested by @Kleopatra in comment)ActionListener
instead of MenuListener
. (Only if you do not want to do operation on menuCanceled and menuDeselected)
这篇关于MenuListener实现,如何检测单击哪个JMenu?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!