我知道有数以百万计的问题,但我无法理解其中的大多数。我见过人们做了类似的事情:
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode()== KeyEvent.VK_Q)
//do something
}
但是 keyPressed 必须重写某些类的方法才能工作或在其他线程中运行。我真的不知道该怎么做。有人可以给我最简单的 java keylistener 代码吗?
即使程序没有聚焦,它也应该可以工作(它只是控制台程序)。
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
的新类,该类扩展 KeyAdapter
。
class MyKeyListener extends KeyAdapter{
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode()== KeyEvent.VK_Q)
System.out.println("Key Q pressed!");
}
}
现在让我解释一下。
首先,当您创建 JFrame 时,它没有附加默认的 KeyListener
。因此,我们必须创建一个类MyKeyListener
来做到这一点。
其次,我们扩展了 KeyAdapter 而不是实现 KeyListener,因为其中的方法比您需要的要多得多。当你扩展KeyAdapter时,你只需要覆盖keypressed()
方法,但你必须实现所有(我认为是3个)其他方法您不需要实现您的目的。
最后,如果您想要执行其他方法,例如 keyreleased()
,只需将其添加到 MyKeylistener
类中即可。
希望这有帮助!
编辑:根据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();
关于Java最简单的按键监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34864625/