在Java中,我已成功在屏幕上显示图像。现在我想通过for循环运行它来移动它。 for循环运行10次,每次睡眠1秒。我没有按预期每秒移动图像,而是等待10秒钟,然后显示10张图像。
这是我的代码:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class ImageDraw extends JComponent {
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Image img1 = Toolkit.getDefaultToolkit().getImage("player.png");
int x = 0;
int y = 0;
for(int i = 0;i<10;i++){
try {
Thread.sleep(1000);
x+=10;
y+=10;
g2.drawImage(img1, x, y, this);
repaint();
} catch (InterruptedException e) {
e.printStackTrace();
System.exit(0);
}
} //end for
} //end paint
} //end class
如何使图像看起来好像每当它在循环中运行时都会移动?
答案 0 :(得分:2)
除了其他建议:
永远不要在绘画方法中阅读图像。在构造类时读取图像或使用setImage(...)方法传入图像。
自定义绘制是通过覆盖paintComponent()方法而不是paint()方法完成的。
答案 1 :(得分:1)
为此使用Timer
,并删除Thread.sleep()
。您正在UI线程上运行此代码,当您调用Thread.sleep()
时,您将UI线程置于休眠状态,这意味着在整个循环完成之前不会更新。