我正在尝试做的是练习一些摆动编码。我从头开始创建一个矩形,并在框架上给它一个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;
}
}
}
这是我得到的截图:
所有内容都通过另一个类显示,但所有这一切都是初始化各种JFrame组件(大小,可见性等)并启动程序。
当我运行程序时,我无法更新x变量。有人能让我知道我需要添加什么吗?
感谢。
答案 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在评论中提到的那样,至少阅读那本书的第一章。它为您提供了有关视频游戏中双缓冲,多线程的提示,并且它提供了一个可以使用的良好循环。