当我用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,而您不必为此担心。