我正在尝试用 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
的问题创建。
paintComponent
在JPanel
做了一项重要的工作,您应该将其称为 super
进行任何自定义绘画之前的方法。
参见Painting in AWT and Swing和 Performing Custom Painting了解更多详情
您还应该努力在事件调度线程的上下文中初始化您的 UI,这解决了某些平台上的许多已知问题,请参阅 Initial Threads了解更多详情
关于java - Java 中的动画不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36049529/