2010-01-16 167 views
0

对不起,对于双重发布,已经发布了这个问题一次,但我意识到我不够明确。我还没有设法找到一个回答我的问题,所以我会试着更好地描述我的问题就在这里:用箭头键移动JLabel

我有以下类别:

public class Paddle extends JLabel {} 
public class Canvas extends JPanel implements Runnable {} 

现在,当我启动线程描述在Canvas中,我想要一个无限循环(程序退出时循环)。在这个循环中我有一个DIRECTION变量。当按下左箭头键时,我想将此设置为-1。如果右箭头键被按下,我想+1是它的价值。如果上述两种情况都不是这样,那么它的值应该默认为0.

我希望我这次更明确。如果不是,请告诉。

+0

你准确的问题是什么? – Bozho 2010-01-16 11:47:42

回答

0

好了,让击键,你需要有一个实现KeyListener

像这样的类:

public class MyKeyListener implements KeyListener, MouseListener{ 
    int direction = 0; 

    public void keyPressed(KeyEvent e) { 
     if(e.getKeyCode() == KeyEvent.VK_LEFT) direction = -1; 
     else if(e.getKeyCode() == KeyEvent.VK_RIGHT) direction = 1; 
    } 

    public void keyReleased(KeyEvent e) { 
     direction = 0; 
    } 
} 
在初始化代码

然后(例如,在您的JPanel的构造函数派生类)您的键侦听器设置为您MyKeyListener类

MyKeyListener mk = new MyKeyListener(); 
    this.addKeyListener(mk); 

的一个实例,在你的循环,你只是看看MK的方向费尔德;

+0

你对主代码的理解到底是什么?主要? JFrame? JPanel。似乎没有任何工作。我是否必须把重点放在某种东西上? – 2010-01-16 12:33:14

+0

可能在您的Canvas类的构造函数中。您不需要手动设置焦点。尝试点击画布。 您可以在keyPressed函数中添加一些System.out.println(direction)语句,以确保它实际上被调用。 – 2010-01-16 13:25:23