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

时间:2015-05-13 18:57:45

标签: 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

3 个答案:

答案 0 :(得分:2)

您应该在paintComponent方法中完成所有绘画,而不是自定义渲染您的计时器。类似的东西:

   public void actionPerformed(ActionEvent e) {            
        player.tick();
        p.repaint();
    }

然后在paintComponent()

中重新渲染播放器和背景

当您调整面板大小等时,您当前的绘画会遇到问题

答案 1 :(得分:2)

要绘制Swing,您不应直接从JPanel获取Graphics对象。相反,覆盖paintComponent方法并使用参数Graphics对象来执行自定义绘图,调用父方法来擦除上一个绘图

@Override
public void paintComponent(Graphics g){
    super.paintComponent(g);
    //custom painting goes here
}

如果您想触发重绘,请在JPanel上使用该名称的方法:

p.repaint();

答案 2 :(得分:0)

更改了Graphic的位置后,尝试在ActionListener中调用'p.repaint()'。