用于f9键的KeyEvent getActionCommand?

时间:2014-01-18 06:21:31

标签: java swing awt key-bindings actionevent

当键盘键全部正常(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)。谢谢你的帮助。

2 个答案:

答案 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");

    }