我在互联网上看到了很多关于如何处理awt和swing输入的矛盾建议,包括这里,而且有几个人已经修改了我的代码,它现在变得一团糟。
选项
- 实现KeyListener或扩展KeyAdapter
- ^在应用程序的主类中使用匿名类、使用私有类或使用外部输入管理类。
- 将事件对象发送给需要知道输入的每个对象,发送按下的键数组,或使每个类成为监听器并将其添加到主类中。
所以我可以有
public class Board extends JPanel implements KeyListener{
public Board(){addKeyListener(this);}}
或者
public Board(){addKeyListener( new KeyListener(){...});}
或者
public class Board extends JPanel {
private class PrivateListener implements KeyListener{...}
public Board(){addKeyListener(new PrivateListener());
或者
public class PublicListener implements KeyAdapter{...}
public class Board extends JPanel {
public Board(){addKeyListener(new PublicListener());
或者
addKeyListener(this);
addKeyListener(obj1);
addKeyListener(obj2);
implements KeyListener
可以用extends KeyAdapter
来替代,但我不会这样做,因为Java只允许一个父类。
然后还有一个问题:我不知道这是怎么进入我的代码的。
private boolean [] keys = new boolean[256];
public void keyPressed(KeyEvent e) {keys[e.getKeyCode()] = true;}
public void keyReleased(KeyEvent e) {keys[e.getKeyCode()] = false;}
public boolean isKeyDown(int k) {return keys[k];}
或者
public void keyPressed(KeyEvent e) {
obj1.keyPressed(e);
obj2.keyPressed(e);
}
实际上,最好的awt键盘输入实现是什么?