当我按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());
}
}
答案 0 :(得分:4)
KeyEvents仅传递给可聚焦的组件。
阅读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,您不必担心这一点。
答案 1 :(得分:0)
[KeyEvent的Java API]
getKeyChar方法始终返回有效的Unicode字符或CHAR_UNDEFINED。 KEY_TYPED事件报告字符输入:KEY_PRESSED和KEY_RELEASED事件不一定与字符输入相关联。因此,getKeyChar方法的结果保证仅对KEY_TYPED事件有意义。
对于按键和键释放事件,getKeyCode方法返回事件的keyCode。对于键类型事件,getKeyCode方法始终返回VK_UNDEFINED。
在释放的密钥上使用getKeyCode。 KeyEvent.F1,F2,...可用于功能键。