将 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 手动执行这段代码?
两种我想到但无法实现的方法包括:
- 将 MouseListener 添加到 inputMap
- 在 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();
}
});
我遇到了一个似乎有点独特的问题。我目前正在尝试将鼠标事件编码到我的程序中,这是一种游戏引擎。我的问题是:
当鼠标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 手动执行这段代码?
两种我想到但无法实现的方法包括:
- 将 MouseListener 添加到 inputMap
- 在 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();
}
});