将 MouseEvent/MouseListener 链接到 ActionMap/InputMap 在 Java 中绑定

Linking MouseEvent/MouseListener to ActionMap/InputMap binds in Java

我遇到了一个似乎有点独特的问题。我目前正在尝试将鼠标事件编码到我的程序中,这是一种游戏引擎。我的问题是:

当鼠标clicked/released时,我想唤起已经写成回车键动作的代码。

在我的绑定 class 中,我 link 这样输入我的操作:

public class Binds extends InputMap
{
    public Binds(JPanel object)
    {
        // InputMap stuff
        InputMap inputMap = object.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
        inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false), "ESCAPE");
    }
}

配合对应的ActionMap:

ActionMap actionMap = game.getActionMap(); //game is an object which extends JPanel.
actionMap.put("ENTER", new AbstractAction(){
    @Override
    public void actionPerformed(ActionEvent e)
    {
        //A very excessive amount of code    
    }
} 

我不想复制粘贴ActionMap中的代码,希望保持代码简单。有什么办法可以让我的 link 我的 MouseEvent/MouseListener 手动执行这段代码?

两种我想到但无法实现的方法包括:

  1. 将 MouseListener 添加到 inputMap
  2. 在 mouseClicked(MouseEvent e) 方法中手动调用 ActionMap 代码。

我试过想办法兼顾两者,但似乎没有办法。另外,我的代码中没有 ActionListeners。我将它们与我的 JButtons 一起使用,而不是我的键绑定。如果您需要任何其他信息,请告诉我。

我能做什么?非常感谢您的帮助。

将代码移至私有方法:

private void doAction() {
    //A very excessive amount of code    
}

然后从 ActionMap 和 MouseListener 方法中调用该方法:

actionMap.put("ENTER",
    new AbstractAction() {
        private static final long serialVersionUID = 1;

        @Override
        public void actionPerformed(ActionEvent event) {
            doAction();
        }
    });

gamePanel.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseReleased(MouseEvent event) {
        doAction();
    }
});