当我用F1到12或0到9或A到Z按键盘(所有按钮)时。我看不到它捕获了我的键盘输入。我该如何解决?

public class Boot extends JWindow implements KeyListener
{
  public Boot()
  {
    .....
    this.addKeyListener(this);
    ....
  }

  public void keyTyped(KeyEvent ke)
  {
    System.out.println( ke.getKeyChar());
  }

  public void keyPressed(KeyEvent ke)
  {
    System.out.println( ke.getKeyChar());

    /* KEY EVENTS */
    // KeyEvent.KEY_TYPED
    // KeyEvent.KEY_PRESSED
    // int id = id.getId();

  }

  public void keyReleased(KeyEvent ke)
  {
    System.out.println( ke.getKeyChar());
  }

}

最佳答案

KeyEvent仅传递给可聚焦的组件。

阅读JWindow()构造函数的API。它指出:

创建一个没有指定所有者的窗口。该窗口将无法聚焦。

阅读JWindow(Frame)构造函数的API。它指出:

创建一个具有指定所有者框架的窗口。如果owner为null,则将使用共享所有者,并且该窗口将无法聚焦。同样,除非窗口的所有者显示在屏幕上,否则该窗口将无法聚焦。

因此,基本上,在使用JWindow时,您还需要创建一个可见的JFrame。

JFrame frame = new JFrame();
frame.setVisible( true );
JWindow window = new JWindow(frame);

我在论坛上看到的一种黑客手段是:
JWindow window = new JWindow(new JFrame("is Showing")
{
   public boolean isShowing()
   {
     return true;
   }
});

或更好的方法是使用未装饰的JFrame,而您不必为此担心。

10-02 22:06