您无需创建任何窗口来获取事件。你的main
函数是空的,所以你的程序什么都不做:它的进程在启动后关闭。
查看使用 Swing教程创建 GUI 。您将在编译和运行 Swing 程序部分找到最简单的Hello World GUI 应用程序,请参阅HelloWorldSwing.java。
创建框架是不够的:您必须KeyListener
在框架或其他组件上注册。这是完整的示例:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class PressKey implements KeyListener, Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new PressKey());
}
@Override
public void run() {
JFrame frame = new JFrame("Press a key");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addKeyListener(this);
frame.setSize(300, 150);
frame.setVisible(true);
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
System.out.println("Key pressed: " + e.getKeyChar());
}
}
它是如何工作的?该函数main
创建一个PressKey
类的实例并将其传递给SwingUtilities.invokeLater
实用程序方法。这是必需的,因为 Swing 不是线程安全的,对 GUI 组件的所有修改都必须在事件调度线程(EDT) 上执行。因此invokeLater
将作业安排到 EDT;因为结果PressKey.run()
将在 EDT 上运行:这是我们创建框架并注册KeyListener
附加到框架的地方,然后我们显示框架。当屏幕上显示框架时,按任意键:您将在控制台中看到相应的字符。如果您按下功能键或其他不生成输入字符的键,您将看不到任何打印内容,因为在这种情况下KeyEvent.KEY_TYPED
不会生成。
有关详细信息,请参阅如何编写关键侦听器。