Java 如何更改KeyListener在特定事件期间执行的操作

Java 如何更改KeyListener在特定事件期间执行的操作,java,swing,input,game-development,Java,Swing,Input,Game Development,我正在尝试使用JavaSwing制作一个简单的RPG游戏。游戏由键盘控制,使用按键监听。问题是,我需要在特定事件期间更改“键绑定”,例如在玩家和NPC之间的对话期间。假设游戏给了我3个对话选择。要选择其中一个,我需要在键盘上按1、2或3。在选择了其中一个之后,对话继续进行,然后游戏给了我另外4个选择。现在我希望能够再次使用1、2、3和4,但它们已经被使用,我不知道如何重新绑定它们。有两种不同的方法。首先,您可以使用一个API,比如键绑定API。键绑定允许您在焦点而不是组件上激活它。这应该能很好地

我正在尝试使用JavaSwing制作一个简单的RPG游戏。游戏由键盘控制,使用按键监听。问题是,我需要在特定事件期间更改“键绑定”,例如在玩家和NPC之间的对话期间。假设游戏给了我3个对话选择。要选择其中一个,我需要在键盘上按1、2或3。在选择了其中一个之后,对话继续进行,然后游戏给了我另外4个选择。现在我希望能够再次使用1、2、3和4,但它们已经被使用,我不知道如何重新绑定它们。

有两种不同的方法。首先,您可以使用一个API,比如键绑定API。键绑定允许您在焦点而不是组件上激活它。这应该能很好地回答你的问题

仅供快速参考,以下是如何将单个密钥与API绑定:

myComponent.getInputMap().put("userInput", "myAction");
myComponent.getActionMap().put("myAction", action);
第二种方法涉及扩展AbstractAction类。例如:

public class DownAction extends AbtractAction {
    @Override
    public void actionPerformed(ActionEvent e) {
    //code here
    }
}

这一步一步地展示了如何做到这一点,有两种不同的方法。首先,您可以使用一个API,比如键绑定API。键绑定允许您在焦点而不是组件上激活它。这应该能很好地回答你的问题

仅供快速参考,以下是如何将单个密钥与API绑定:

myComponent.getInputMap().put("userInput", "myAction");
myComponent.getActionMap().put("myAction", action);
第二种方法涉及扩展AbstractAction类。例如:

public class DownAction extends AbtractAction {
    @Override
    public void actionPerformed(ActionEvent e) {
    //code here
    }
}

这一步一步地展示了如何做到这一点

要么创建与数字按钮相关联的灵活动作类,要么从键侦听器中不断添加和删除动作类。我将实际使用API而不是
键侦听器
,原因如下:,您可以根据需要更改与给定键关联的
操作
,也可以创建与数字按钮关联的灵活操作类,或者从键侦听器中不断添加和删除操作类。我将实际使用API而不是
键侦听器
,原因如下:,您可以根据需要更改与给定键关联的
操作
。这正是我想要的。谢谢,没问题!这正是我想要的。谢谢,没问题!