java - 如何使用 key 监听器更新 "x"变量?

标签 java swing graphics

我想做的是练习一些 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;
        }
    }   
}

这是我得到的屏幕截图:

black window with small purple square in the left side

一切都通过另一个类来体现,但所做的只是初始化各种 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/

相关文章:

java - Spring和MVC正确的项目结构

android - 如何创建自定义 UI 组件(例如响应式搜索栏)?

java - 使用 SwingWorker 向 jTable 添加行并更新 GUI

java - KeyListener 未检测到按键

java - Java Applet 中的paint 和draw 方法有什么区别?

java - 是否可以使用广播接收器在设备主屏幕上显示警报对话框,而不是在我们的应用程序主要 Activity 上显示警报对话框?

iphone - 需要 iPhone 应用程序的指针,其中图形对象会跟随您的手指

java - 如何知道是否在图形对象上单击

java - 没有 javac 编译器错误,但 mouseEntered 方法不起作用

java - 如何获得有关函数返回 null 引起的 NPE 的警告?