我有一个似乎有些独特的问题。我目前正在尝试将鼠标事件编码到我的程序中,该程序是一种游戏引擎。我的问题是:
单击/释放鼠标时,我想唤起已作为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();
}
});