【问题标题】:In java how do I check if a user is pressing a certain key?在java中如何检查用户是否按下了某个键?
【发布时间】:2015-12-25 06:55:41
【问题描述】:

我正在尝试制作一个在后台运行的热键程序,但我不知道如何让它检查何时按下某个键(在本例中为减号键)。我需要程序等待某个键被按下,然后程序检查该键是否是减号键。

我的程序的一个例子就是现在的伪代码。

while(true)
    {
        int pressedKey = userInputedKey;
        if(pressedKey == KeyEvent.VK_MINUS)
        {
            //action to be executed
        }
    }

我在其他线程上找到了很多使用 KeyListener 的建议,但我可能没有正确使用它,所以如果您的回答是使用 KeyListener,请解释如何彻底使用它(确切地说,我不明白如何当一个 KeyEvent 被实例化时,它已经输入了任何被按下的键作为该 KeyEvent 中的 keyCode,所以如果我在调用 KeyListener 时使用它,我将不会得到正确的结果)。当然,我对 KeyEvent 或 KeyListener 了解不多,所以我可能没有尝试通过使用 KeyListener 以正确的方式解决我的问题。

【问题讨论】:

  • 如何检查用户是否在按键?是我一直用来解决我的问题的线程之一,尽管最佳答案并没有解决他的问题(如提出问题的人的 cmets 所示)。
  • 某些东西必须拦截关键事件并且它必须具有焦点,所以它不能在后台运行。想象一下,您打开了 5 个程序,而您将重点放在一个程序上。您不能全部拦截 5 个关键事件,只有一个处于焦点。
  • 另外,cmets中的问题不要重复,写一次就够了。

标签: java keyevent


【解决方案1】:

您可以使用KeyEvent获取key code,然后查看。

例如:

someCompunent.addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_MINUS) {
           // do the stuff
        }
    }
});

【讨论】:

  • 按照我现在设计程序的方式,我没有要 addKeyListener() 的组件。如图所示的程序几乎是我目前拥有的所有代码。我应该使用什么组件,或者我应该使用一个组件?
  • 不,我试图让它作为后台进程运行,以便它可以在所有程序上运行。
  • 程序要运行在哪里,你说不在JFrame中,那在哪里呢? IDE里面?当你运行程序时,必须有一些东西可以运行。
  • 目前我使用他的 windows cmd 来运行程序,但我的目标是在完成它后创建一个 jar 文件来运行它。
  • 我明白了。但是 KeyListener 只适用于 Swing,在命令行中你不能使用这种方式。但是您可以使用BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 并检查用户的每个输入,如果解决了您的问题,您可以尝试一下。祝你好运!
【解决方案2】:

如果你想使用全局热键,当程序在任何应用程序中捕获按键事件时 - 尝试使用JKeyMaster library(在 Windows、Linux 和 MAC OS 中支持全局热键)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-26
    • 2018-05-02
    • 2014-07-13
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多