如何在不影响其他组件的情况下重新绘制组件

时间:2013-06-11 19:54:26

标签: java swing components

我将JPanel子类化为使用计时器显示动画图像。这是计时器的任务。

private class AnimationTimerTask extends TimerTask {
    @Override
    public void run() {
        // Change the current image

        repaint();
    }
}

此外,我重写paintComponent方法以绘制当前图像。

我使用此类创建一个对象作为背景,并在其上有一个标签。我使用" setComponentZOrder"确保标签在背景上的方法。

首先,标签显示正常。但是在背景图像改变后,它被背景所覆盖,这意味着调用了重绘方法。

我猜问题是由背景对象的重绘引起的。

我将repaint()替换为getParent.repaint(),问题解决了。但我认为这不是正确的方法。

1 个答案:

答案 0 :(得分:0)

老实说,我不确定这是正确还是错误的答案,所以我希望其他人能够对此表示赞同。但有一种叫做RepaintManager的东西。那篇文章说:

  

对于大多数程序,RepaintManager可以被视为Swing内部系统的一部分,几乎可以忽略。但是,它的API为程序提供了更好地控制绘画某些方面的选项。

它有这样的方法:

public static RepaintManager currentManager(JComponent c)
public synchronized void addDirtyRegion(JComponent c, int x, int y, int w, int h) 
public Rectangle getDirtyRegion(JComponent aComponent)
public void markCompletelyDirty(JComponent aComponent) 

直接使用这些方法来做你想做的事。