Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JButton上模拟JMenuItem鼠标侦听器_Java_Jbutton_Actionlistener_Mouselistener_Jmenuitem - Fatal编程技术网

Java 在JButton上模拟JMenuItem鼠标侦听器

Java 在JButton上模拟JMenuItem鼠标侦听器,java,jbutton,actionlistener,mouselistener,jmenuitem,Java,Jbutton,Actionlistener,Mouselistener,Jmenuitem,我不知道标题是否可以理解。 不管怎样,我有一些JMenuItems,我为这些设置了MouseStener mntmExtractPaleographyFeature.addMouseListener(this); 其中,MNTMExtractPaloGraphyFeature是一个JMenuitem,它是实现MouseListener的类 mntmExtractPaleographyFeature.addMouseListener(this); 所以我为mouseListener添加了方法,

我不知道标题是否可以理解。 不管怎样,我有一些JMenuItems,我为这些设置了MouseStener

mntmExtractPaleographyFeature.addMouseListener(this);
其中,MNTMExtractPaloGraphyFeature是一个JMenuitem,它是实现MouseListener的类

mntmExtractPaleographyFeature.addMouseListener(this);
所以我为mouseListener添加了方法,比如

@Override
public void mouseReleased(MouseEvent arg0) {
    if(arg0.getSource()==mntmExtractPaleographyFeature) {
        //Code Here
    }
现在我有了一个JButton extractPaleographyB,它与JMenuItem做了完全相同的事情。我不想复制/粘贴代码两次(还因为它不是唯一的按钮/jmenuitem)。我试过了

extractPaleographyB.addMouseListener(mntmExtractPaleographyFeature.getMouseListeners()[1]);
但它不起作用。有什么想法吗?

创建一个菜单项并用于菜单项和按钮

教程中的一段代码

Action leftAction = new LeftAction(); //LeftAction code is shown later
...
button = new JButton(leftAction)
...
menuItem = new JMenuItem(leftAction);
要创建Action对象,通常需要创建AbstractAction的子类,然后实例化它。在您的子类中,必须实现actionPerformed方法,以便在操作事件发生时做出适当的反应。下面是创建和实例化AbstractAction子类的示例:

leftAction = new LeftAction("Go left", anIcon,
             "This is the left button.",
             new Integer(KeyEvent.VK_L));
...
class LeftAction extends AbstractAction {
    public LeftAction(String text, ImageIcon icon,
                      String desc, Integer mnemonic) {
        super(text, icon);
        putValue(SHORT_DESCRIPTION, desc);
        putValue(MNEMONIC_KEY, mnemonic);
    }
    public void actionPerformed(ActionEvent e) {
        displayResult("Action for first button/menu item", e);
    }
}

您是否尝试过为JButton使用ActionListener,然后让MouseListener处理程序和ActionListener处理程序都调用相同的单独方法?那么我是否应该为每个按钮和jMenuItem创建一个类?@AntonioCalì:为每个具有唯一功能的按钮/菜单项创建一个类。例如,如果我要创建一个Calculator类,我会对所有数字按钮使用一个Action类,因为它们都执行相同的基本操作,唯一的区别是它们所表示的数字。1+使用类似mouseListener的方法创建类是件好事吗?@AntonioCalì:您似乎有点困惑——创建mouseListener就是创建一个新类。@HovercraftFullOfEels在所描述的情况下,mouseListener是这样添加的,因此不会创建新实例