我想做的是练习一些 Swing 编码。我从头开始创建了一个矩形,并为其指定了框架上的 x 和 y 位置。我一直在尝试做的是使用一个关键监听器来更新 x 变量以将其左右移动。
这里我创建了一个实现 Action 监听器的类:
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();
}
好的,现在开始我想要完成的任务。
我创建了一个“移动”方法,该方法将被输入到 Action Performed 方法中,然后我创建了一个处理按键事件的按键适配器方法:
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 变量。有人可以让我知道我需要添加什么吗?
谢谢。
最佳答案
我认为你的问题是你的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 按钮的方式,如果您按左按钮,方 block 将向右移动;如果您按下左按钮,方 block 将向右移动。它会朝相反的方向发展。另外,就像 dann.dev 在他的评论中提到的那样,至少阅读该书的第一章。它为您提供了有关视频游戏中的双缓冲、多线程的技巧,并且提供了一个可供您使用的漂亮循环。
关于java - 如何使用 key 监听器更新 "x"变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11301829/