0

当键盘键都是正常的(az)时,我处理一些按键的代码工作正常,但现在我想将默认的屏幕截图键设置为F9.

if (e.getActionCommand().toUpperCase().equals(configFile.getProperty("TOGGLE_ATTACK_KEY"))){
    inAttackMode = !inAttackMode;
} else if (e.getActionCommand().toUpperCase().equals(configFile.getProperty("SCREENSHOT_KEY"))){

当我按下键时,e.getActionCommand() 返回 null F9。注册此密钥的代码在这里:

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(当我按下时它返回 null F9)。谢谢你的帮助。

4

2 回答 2

3

使用键绑定的原因之一是避免使用嵌套的 if/else 语句。相反,您为键绑定创建一个唯一的操作,然后操作命令是无关紧要的。

//theDesktop.getActionMap().put("f9ButtonRelease", ClassKeyReleaseHandler);
theDesktop.getActionMap().put("f9ButtonRelease", ScreenShotReleaseHandler);

这是在 Swing 中创建所有默认动作的方式。

于 2014-01-18T16:34:18.370 回答
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");

    }
于 2014-01-18T07:01:57.797 回答