我知道对此有数以百万计的问题,但是我大部分都不明白。我已经看到人们做出这样的事情:

public void keyPressed(KeyEvent e)
{
    if (e.getKeyCode()== KeyEvent.VK_Q)
        //do something
}


但是keyPressed必须重写某些类的方法才能工作或在其他线程中运行。我真的不知道该怎么做。有人可以给我提供最简单的Java键盘监听程序的代码。
即使程序不集中(它只是控制台程序),它也应该工作。

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.*;

import javax.swing.JFrame;

public class SquatCounter {

class MyKeyListener extends KeyAdapter{
    public void keyPressed(KeyEvent e)
    {
        if (e.getKeyCode()== KeyEvent.VK_Q)
            System.out.println("Key Q pressed!");
    }
}

JFrame jf = new JFrame("title");
public SquatCounter() {
    jf.addKeyListener(new MyKeyListener());
}
public static void main(String[] args) {
    Key1 key = new Key1 ();
    SquatCounter test = new SquatCounter();
}
}

最佳答案

设置JFrame时,添加如下所示的KeyListener:

JFrame jf = new JFrame("title");
jf.addKeyListener(new MyKeyListener());
jf.setVisible(false);


jf.setVisible(false);停止显示程序窗口(仅命令行)

然后创建一个名为MyKeyListener的新类。

class MyKeyListener extends KeyAdapter{
    public void keyPressed(KeyEvent e)
    {
        if (e.getKeyCode()== KeyEvent.VK_Q)
            System.out.println("Key Q pressed!");
    }
}


现在让我解释一下。

首先,当您创建JFrame时,它没有附加默认的extends KeyAdapter。因此,我们必须创建一个类KeyListener来做到这一点。

其次,我们扩展了KeyAdapter而不是实现KeyListener,因为那里的方法比您所需要的要多得多。扩展KeyAdapter时,仅需要覆盖MyKeyListener方法,但必须实现所有(我认为是3)不需要的其他方法。

最后,如果您想使用其他方法,例如keypressed(),只需将其添加到keyreleased()类中即可。

希望这可以帮助!

编辑:根据OP的要求,应该是这样的:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line = "";

while (line.equalsIgnoreCase("q") == false) {
   line = in.read();

   System.out.println("Q is pressed!");
}

in.close();

10-07 19:19
查看更多