gpt4 book ai didi

java - 在 Java 中将 MouseEvent/MouseListener 链接到 ActionMap/InputMap 绑定(bind)

转载 作者:行者123 更新时间:2023-12-01 17:21:43 25 4
gpt4 key购买 nike

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

当单击/释放鼠标时,我想调用已经编写为 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 以便它手动执行此代码吗?

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

  1. 将 MouseListener 添加到 inputMap
  2. 在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com