java - 在 JButton 上模拟 JMenuItem MouseListener

标签 java jbutton actionlistener mouselistener jmenuitem

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

mntmExtractPaleographyFeature.addMouseListener(this);

其中mntmExtractPaleographyFeature是一个JMenuitem,this是实现MouseListener的类。

所以我为 mouseListener 添加了方法,例如

@Override
public void mouseReleased(MouseEvent arg0) {
    if(arg0.getSource()==mntmExtractPaleographyFeature) {
        //Code Here
    }

现在我有了这个 JButton extractPaleographyB,它的功能与 JMenuItem 完全相同。我不想复制/粘贴代码两次(也因为它不是唯一的按钮/jmenuitem)。我尝试过

extractPaleographyB.addMouseListener(mntmExtractPaleographyFeature.getMouseListeners()[1]);

但它不起作用。有什么想法吗?

最佳答案

创建 Action并用于菜单项和按钮

教程中的一段代码

Action leftAction = new LeftAction(); //LeftAction code is shown later
...
button = new JButton(leftAction)
...
menuItem = new JMenuItem(leftAction);

要创建 Action 对象,通常创建 AbstractAction 的子类,然后实例化它。在您的子类中,您必须实现 actionPerformed 方法,以便在操作事件发生时做出适当的 react 。下面是创建和实例化 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);
    }
}

关于java - 在 JButton 上模拟 JMenuItem MouseListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31036360/

相关文章:

java - 如何删除 JTextField 上的 MouseListener/ActionListener

java - 使用 StringBuilder 将多行 Printwriter 转换为 CSV 文件

java - 通过操作事件更改 JPanel 组件的属性

java - 网格袋布局不会填充按钮

java - 将 JButton 设置移至单独的类

java - 我的 JButton 的 ActionListener 如何访问另一个类中的变量?

java - 无法使用 JUnit 4.11 捕获带有 ExpectedException 的 UnrecognizedPropertyException

java - 嵌套的 while 循环与条件不匹配

java - 使用 maven-javadoc-plugin 将 jar 添加到 doclet 类路径

java - 使用 APDU 将 Applet 上传到真正的智能卡