我需要在程序运行时不断地在不同位置重绘某个图像。所以我设置了一个 while 循环,它应该在屏幕上移动图像,但它只是一遍又一遍地重绘图像。我究竟做错了什么?有没有办法在将旧图像绘制到新位置之前将其删除?
JFrame frame = buildFrame();
final BufferedImage image = ImageIO.read(new File("BeachRoad_double_size.png"));
JPanel pane = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int num = 0;
boolean fluff = true;
while (fluff == true) {
num = num + 1;
g.drawImage(image, num, 0, null);
if (num == 105) {
fluff = false;
}
}
}
};
frame.add(pane);
最佳答案
您不能在 paintComponent() 方法中编写循环代码。代码将执行得如此之快,以至于图像只会绘制在最终位置,在您的情况下,x 位置应为 105。
相反,您需要使用 Swing Timer 每隔 100 毫秒左右安排一次动画。然后当计时器触发时,您更新 x 位置并在面板上调用 repaint() 。阅读 Using Swing Timers 上的 Swing 教程了解更多信息。
关于Java.drawImage : How do I "unDraw" or delete a image?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17867537/