我知道对此有数以百万计的问题,但是我大部分都不明白。我已经看到人们做出这样的事情:
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();