当键盘键全部正常(a-z)时,处理某些按键的代码工作正常,但现在我想使默认的屏幕截图键为 F9 。
if (e.getActionCommand().toUpperCase().equals(configFile.getProperty("TOGGLE_ATTACK_KEY"))){
inAttackMode = !inAttackMode;
} else if (e.getActionCommand().toUpperCase().equals(configFile.getProperty("SCREENSHOT_KEY"))){
当按 F9 键时,e.getActionCommand()返回null。注册此密钥的代码如下:
theDesktop.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("released " + configFile.getProperty("SCREENSHOT_KEY")), "f9ButtonRelease");
theDesktop.getActionMap().put("f9ButtonRelease", ClassKeyReleaseHandler);
感谢您对此提供任何帮助......我试图搜索Google和SO,但没有看到任何具体内容。还尝试使用VK_F9进行注册,但它只用 F9 触发(无论哪种方式,当我按 F9 时它返回null)。谢谢你的帮助。
答案 0 :(得分:3)
使用键绑定的一个原因是避免使用嵌套的if / else语句。相反,您为键绑定创建了一个唯一的Action,然后action命令无关紧要。
//theDesktop.getActionMap().put("f9ButtonRelease", ClassKeyReleaseHandler);
theDesktop.getActionMap().put("f9ButtonRelease", ScreenShotReleaseHandler);
这是在Swing中创建所有默认操作的方式。
答案 1 :(得分:0)
更新:与OP的问题无关。
如果要使用常量KeyEvent.VK_F9。您不应该使用e.getActionCommand,而是使用e.getKeyCode。
例如:
public class TestListener implements KeyListener{
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_F9)
System.out.println("F9 is pressed");
}