Aza*_*Aza 1 java swing keyevent keylistener
我有一个班级世界如下:
public class World extends JFrame implements KeyListener {
public boolean left = false, right = false, back = false, fwd = false;
public World() {
this.setSize(600, 600);
this.setVisible(true);
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getExtendedKeyCode() == KeyEvent.VK_LEFT) left = true;
if(e.getExtendedKeyCode() == KeyEvent.VK_RIGHT) right = true;
if(e.getExtendedKeyCode() == KeyEvent.VK_UP) fwd= true;
if(e.getExtendedKeyCode() == KeyEvent.VK_DOWN) back = true;
System.out.println("L:"+left+" R:"+right+" F:"+fwd+" B:"+back);
}
@Override
public void keyReleased(KeyEvent e) {
if(e.getExtendedKeyCode() == KeyEvent.VK_LEFT) left = false;
if(e.getExtendedKeyCode() == KeyEvent.VK_RIGHT) right = false;
if(e.getExtendedKeyCode() == KeyEvent.VK_UP) fwd= false;
if(e.getExtendedKeyCode() == KeyEvent.VK_DOWN) back = false;
System.out.println("L:"+left+" R:"+right+" F:"+fwd+" B:"+back);
}
@Override
public void keyTyped(KeyEvent e) {}
}
Run Code Online (Sandbox Code Playgroud)
从理论上讲,这应该在按键或按键释放时触发,但事实并非如此.框架中的组件正确绘制.
该帧正在实例化如下:
World m = new World();
m.getContentPane().setBackground(Color.BLACK);
Run Code Online (Sandbox Code Playgroud)
我似乎无法让关键听众开火.没有系统输出.有什么想法吗?
除了没有加入KeyListener,JFrame是不是默认可聚焦所以不会发送KeyEvents到窗口- KeyEvents本身需要重点工作.因此,KeyStrokes在Swing中进行交互的首选方法是使用Key Bindings,它在没有组件焦点的情况下工作.
不,您正在实现接口 - 但从不告诉任何重要的事情。
你可以在你的构造函数中写这个:
addKeyListener(this);
Run Code Online (Sandbox Code Playgroud)
......我相信那会做正确的事情。一些具有添加的KeyListener,基本上。仅仅实现接口并不会自动使任何东西开始使用该实现。