【问题标题】:KeyEvent getActionCommand for f9 key?f9键的KeyEvent getActionCommand?
【发布时间】:2014-01-18 06:21:31
【问题描述】:

当键盘键都正常 (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)。感谢您的帮助。

【问题讨论】:

    标签: java swing awt key-bindings actionevent


    【解决方案1】:

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

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

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

    【讨论】:

    • 这就是我所拥有的,然后每个功能都有大量的内部类... ClassSendButton(Enter)、ClassTabKey(Tab)、ClassExitButton(Logout)。这个可以吗?如果是这样,我会将它们分开并摆脱 ifs。
    • 使用内部类(这是大多数 Swing 组件的工作方式,例如查看 DefaultEditorKit 源代码)或单独的类都可以。
    • 好的,谢谢。我只是不想有这么多的内部类。感谢您的帮助。
    【解决方案2】:

    更新:与 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");
    
        }
    

    【讨论】:

    • OP 正确地使用了键绑定 API 而不是 KeyListener
    • 是的,我很久以前在这里发帖,有人指点我键绑定...我只是不确定将每个功能都分离到一个内部类...希望 Camickr 或您,MadProgrammer,可以让我放心,让我知道这是否是好的编程标准。
    • 我向智者低头,我还是个新手。并且从现在开始扣除我是否有能力回答:) 希望你找到你的答案,OP!
    • 完全不用担心......你在做正确的事(帮助他人)这才是最重要的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2014-08-04
    • 2011-09-08
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多