我有一个程序可以将对象向左或向右移动。 我想利用它,以便它可以与鼠标监听器和键监听器一起使用。使用左箭头键和鼠标左键单击执行相同的选项。反之亦然,鼠标右键或箭头键。 我的代码目前看起来有点像这样,我已经删除了一些不必要的部分。
public class TetrisApplet extends JApplet implements MouseListener, KeyListener {
public void init() {
tetris.addMouseListener(this);
tetris.addKeyListener(this);
public void mouseReleased(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1) {
if (x > 0 && a[x - 1][y] == 0) {
shape.move(-20, 0);
x--;
}
}
if (e.getButton() == MouseEvent.BUTTON3) {
if (x < 9 && a[x + 1][y] == 0) {
shape.move(+20, 0);
x++;
}
}
}
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
switch (keyCode) {
case KeyEvent.VK_LEFT:
if (x > 0 && a[x - 1][y] == 0) {
shape.move(-20, 0);
x--;
}
break;
case KeyEvent.VK_RIGHT:
if (x < 9 && a[x + 1][y] == 0) {
shape.move(+20, 0);
x++;
}
break;
}
}
所以我的问题是,有没有人能解释为什么它不能用于密钥?我的程序允许使用鼠标点击移动对象,但是按下左箭头和右箭头键绝对没有任何效果。我不知道它为什么不起作用。我知道这可能是我失踪的小事,但是非常感谢任何帮助。
答案 0 :(得分:3)
我认为问题与焦点有关。具有焦点的组件获取关键事件而不是您的tetris
组件(它没有任何方法可以获得焦点)。
快速解决方法是添加:
tetris.requestFocus();
在init
方法中,因为您希望焦点从正确的组件(?)和mouseReleased
开始,因为您希望能够抓住焦点试。