java - Java 中的动画不起作用

标签 java swing rendering

我正在尝试用 Java 制作一个圆的动画。我希望每次按键时它都会移动,但它不起作用。我画圆的方式有问题吗?我是否在某处忘记了 repaint()

import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main extends JPanel implements KeyListener {

    int x = 300, y = 300;

    public Main() {
        super();
    }

    public void paintComponent(Graphics g) {
        g.drawOval(x, y, 300, 300);
    }



    @Override
    public void keyPressed(KeyEvent e) {
        x++;
        y++;
        repaint();
    }

    @Override
    public void keyTyped(KeyEvent e) {}

    @Override
    public void keyReleased(KeyEvent e) {}

    public static void main(String[] args) {

        JFrame f = new JFrame();
        f.setSize(1200, 800);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setResizable(false);
        f.add(new Main());
        f.setVisible(true);

    }

}

最佳答案

不要使用KeyListener ,老实说,利用 Key Bindings API相反,它旨在解决 KeyListener 的问题创建。

paintComponentJPanel做了一项重要的工作,您应该将其称为 super进行任何自定义绘画之前的方法。

参见Painting in AWT and SwingPerforming Custom Painting了解更多详情

您还应该努力在事件调度线程的上下文中初始化您的 UI,这解决了某些平台上的许多已知问题,请参阅 Initial Threads了解更多详情

关于java - Java 中的动画不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36049529/

相关文章:

java - TCP 套接字上的 ObjectOutputStream

java - 单击 JOptionPane.showMessageDialog Ok 按钮后如何关闭其他 Swing 窗口

r - 如何在不将每个绘图对象打印到屏幕的情况下将自定义调色板列表附加到 ggplot 对象列表?

android - 呈现问题 : Android Studio 1. 2.1.1 和 Gradle 1.2.3

rendering - 条件和未使用的采样器/纹理为 SM2/3 像素着色器增加了多少性能?

java - 使用 java、xml 和 spring 学习/实现 Web 服务的最佳书籍/教程

java - 两个线程调用相同的 keyEvents 方法

java - HBase 获得多个不同的 rowid?

java - 如何防止定时器锁定我的小程序?

java - 将 KeyListener 添加到 JPanel 不起作用