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