Java 图形绘制在现有图形之上

标签 java image graphics

主类:

    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 时): screenshot

最佳答案

要在 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/

相关文章:

c++ - 如何优化绘图例程以在 Windows CE 中实现最大刷新率?

java - 使用 Java 系统属性的最佳实践

java - 当只有一个 Path 包含根元素时,为什么 Java 7 的新 Path 对象不能相对化?

java - 返回行程数组中最常见的指南名称

image - DELPHI的tImage.picture.loadFromFile的文件名是否存储在某个地方?

ios - 如何创建比设备屏幕大的 UIImage?

c# - 可以推荐 .NET 的 ZedGraph 图表库吗?

java - 释放 BufferedImage 内存的最快方法

php - 获取 Facebook 真实头像 URL

python - 使用带有 Python 的 GDAL 裁剪光栅文件