主类:
public Main() {
Frame f = new Frame();
final Panel p = f.p;
final Player player = new Player();
Timer t = new Timer(UPDATE_PERIOD, new ActionListener() {
public void actionPerformed(ActionEvent e) {
Graphics g = p.getGraphics();
p.render(g);
player.tick();
player.render(g);
g.dispose();
}
});
t.start();
}
播放器渲染方法:
public void render(Graphics g) {
g.drawImage(Images.get("player"), x, y, null);
}
问题是,之前绘制的所有图像仍然存在。示例(当我更改绘制图像的 x 或 y 时):
最佳答案
要在 Swing
中绘图,您不应该直接从 JPanel 获取 Graphics
对象。相反,重写 paintComponent
方法并使用参数 Graphics 对象来执行自定义绘图,并调用父方法来删除先前的绘制
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
//custom painting goes here
}
如果您希望触发重绘,请在 JPanel 上使用该名称的方法:
p.repaint();
关于Java 图形绘制在现有图形之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30223145/