如何使用Key Listener更新“x”变量?

时间:2012-07-02 22:07:45

标签: java swing graphics

我正在尝试做的是练习一些摆动编码。我从头开始创建一个矩形,并在框架上给它一个x和y位置。我一直在尝试做的是使用一个键监听器来更新x变量来左右移动它。

这里我创建了一个实现Action Listener的类:

    public class Board extends JPanel implements ActionListener {

我添加了“x”和“y”变量:

int x, y;
int dx;
int HEIGHT, WIDTH;
private final int DELAY = 50;

接下来是一些附加功能:

    public Board() {

    setBackground(Color.BLACK);
    setFocusable(true);
    setDoubleBuffered(true);
    addKeyListener(new TAdapter());

    x = 15;
    y = 150;
    dx = 5;    //This is what I want to use to update the x variable if possible.

    HEIGHT = 15;
    WIDTH = 15;

}

这是我用“x”和“y”变量创建正方形的地方:

public void paint(Graphics g) {
    super.paint(g);

    int red = 103;
    int green = 10;
    int blue = 100;
    Color square = new Color(red, green, blue);


    g.setColor(square);
    g.fillRect(x, y, WIDTH, HEIGHT);

    Toolkit.getDefaultToolkit().sync();
}

好的,现在我想要完成的事情。

我创建了一个“move”方法,该方法将被输入Action Performed方法,然后我创建了一个处理Key事件的Key Adapter方法:

    public void move() {
        x += dx;
    }

    public void actionPerformed(ActionEvent e) {
    move();
    repaint();
}


private class TAdapter extends KeyAdapter {

    public void KeyPressed(KeyEvent e) {
        int key = e.getKeyCode();

        if (key == KeyEvent.VK_LEFT) {
            dx = 1;
        }

        if (key == KeyEvent.VK_RIGHT) {
            dx = -1;
        }
    }   
}

这是我得到的截图:

black window with small purple square in the left side

所有内容都通过另一个类显示,但所有这一切都是初始化各种JFrame组件(大小,可见性等)并启动程序。

当我运行程序时,我无法更新x变量。有人能让我知道我需要添加什么吗?

感谢。

1 个答案:

答案 0 :(得分:0)

我认为你的问题是你的actionPerformed方法没有被调用,所以你的move()方法也没有被调用。您没有向任何内容添加ActionListener,因此根本不会调用它。我会在keyPressed中调用move()和repaint(),就像这样

if( key == KeyEvent.VK_LEFT ) {
    dx = 1;
    move();
    repaint();
}

if( key == KeyEvent.VK_RIGHT ) {
    dx = -1;
    move();
    repaint();
}

我很确定这会奏效。 我想在你的代码中看到两件事我想指出。首先,keyPressed具有小写k,而不是大写k。其次,你使用dx按钮的方式,如果你按下左按钮,方块将向右移动;它会朝着相反的方向发展。另外,就像dann.dev在评论中提到的那样,至少阅读那本书的第一章。它为您提供了有关视频游戏中双缓冲,多线程的提示,并且它提供了一个可以使用的良好循环。