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

单击/释放鼠标时,我想唤起已作为Enter键的动作编写的代码。

在我的Binds类中,我这样输入链接到我的动作:

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中,并希望保持代码简单。有什么方法可以链接MouseEvent / MouseListener,使其手动执行此代码?

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


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


我试图找到两种方法都可以,但是似乎没有办法。另外,我的代码中没有ActionListeners。我将它们与JButtons一起使用,但不与键绑定一起使用。如果您需要任何其他信息,请告诉我。

我该怎么办?非常感谢你的帮助。

最佳答案

将代码移到私有方法:

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


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

actionMap.put("ENTER", e -> doAction());

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

09-27 10:07