我遇到了一个似乎有些独特的问题。我目前正在尝试将鼠标事件编码到我的程序中,即某种游戏引擎。我的问题是:
当单击/释放鼠标时,我想调用已经编写为 Enter 键操作的代码。
在我的 Binds 类中,我将 Enter 链接到我的操作,如下所示:
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 代码。
我尝试过寻找同时做到这两点的方法,但似乎没有办法这样做。另外,我的代码中没有 ActionListener。我将它们与我的 JButton 一起使用,但不与我的按键绑定(bind)一起使用。如果您需要任何其他信息,请告诉我。
我能做什么?非常感谢您的帮助。
最佳答案
将代码移至私有(private)方法:
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();
}
});
关于java - 在 Java 中将 MouseEvent/MouseListener 链接到 ActionMap/InputMap 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61281052/