Java Swing:按下“InputMap”上的键时,会在按住键的同时触发其动作数次
我登记Java Swing:按下“InputMap”上的键时,会在按住键的同时触发其动作数次,java,swing,key-bindings,keystroke,pressed,Java,Swing,Key Bindings,Keystroke,Pressed,我登记 getInputMap().put(KeyStroke.getKeyStroke("pressed RIGHT"), "go right"); 在测试我得到的代码时:当我按住向右箭头键时,动作会反复触发,而不是像我预期的那样只触发一次 有趣的是 getInputMap().put(KeyStroke.getKeyStroke("released RIGHT"), "stop"); 触发器仅在最终释放密钥时停止 是否有一种方法可以在输入地图上注册按键笔划,以便相关操作在按键时只触发一次
getInputMap().put(KeyStroke.getKeyStroke("pressed RIGHT"), "go right");
在测试我得到的代码时:当我按住向右箭头键时,动作会反复触发,而不是像我预期的那样只触发一次
有趣的是
getInputMap().put(KeyStroke.getKeyStroke("released RIGHT"), "stop");
触发器仅在最终释放密钥时停止
是否有一种方法可以在输入地图上注册按键笔划,以便相关操作在按键时只触发一次?以下文档:
击键表示键盘上的键操作或等效操作
输入设备。击键只能对应于按下或释放
一个特定的按键,就像按键按下和按键释放按键事件一样;
或者,它们可以对应于键入特定的Java字符,
正如键入的按键事件一样。在所有情况下,击键都可以指定
修改器(alt、shift、control、meta、altGraph或其组合
其中)必须在行动期间出现,以实现精确匹配
要仅在发布时触发一次事件,我建议注册
getInputMap().put(KeyStroke.getKeyStroke("typed RIGHT"), "go right");
以下文件为:
解析字符串并返回击键。字符串必须具有
以下语法:
pressed, pressed, pressed.... released.
这对我来说很有意义,因为通常当你按下键时,你希望角色重复。但是,在Mac上,我认为顺序是:
pressed, released, pressed, released, pressed, released
这对我来说毫无意义,并且很难确定何时真正释放了密钥。这适用于聚焦组件,但当您的场景是聚焦窗口中的
时,KeyListener
没有帮助。。。