“paintComponent()”重绘

时间:2014-04-30 20:37:28

标签: java swing paint java-2d

我使用paintComponent()方法绘制了一些数字:

public void paintComponent(Graphics g){

        super.paintComponent(g);
        g.setColor(Color.BLUE);

        g.drawRect(50, 50, 50, 50);
        g.drawOval(60, 60, 60, 60);

        //repaint();
        //g.drawOval(10, 10, 10, 10); - nothing effect
}

但是现在我想要删除所有这些数字并绘制一些新的数字。我不知道我该怎么做?也许我必须使用repaint()方法,但使用它错了?

2 个答案:

答案 0 :(得分:2)

Java会在paintComponent()中绘制您描述的所有数字,但只有此方法返回时。因此,您无法绘制,然后在此方法中隐藏一些数字以进行相同的方法调用。这个方法需要第一次用一组数字来表示,然后用另一组数字来表示。

可能是这样的:

protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.BLUE);

    if (drawFiguresX) {
        g.drawRect(50, 50, 50, 50);
        g.drawOval(60, 60, 60, 60);
    } else {
        g.drawOval(10, 10, 10, 10);
    }
}

答案 1 :(得分:2)

每次调用该方法时,无论您在paintComponent方法中编写什么内容都会被绘制。基于到目前为止的描述,实现您想要实现的目标的通常方法是确定是否应该绘制某些东西:

class TheClass extends JComponent
{
    private boolean paintTheFirstThing = true;

    @Override
    protected void paintComponent(Graphics g){
        super.paintComponent(g);

        if (paintTheFirstThing)
        {
            g.setColor(Color.BLUE);
            g.drawRect(50, 50, 50, 50);
            g.drawOval(60, 60, 60, 60);
        }
        else
        {
            g.drawOval(10, 10, 10, 10)  
        }
    }

    void setPaintTheFirstThing(boolean p)
    {
        this.paintTheFirstThing = p;
        repaint();
    }
}

(这只是一个草图,显示了基本的想法。当然,当你想绘制许多不同的东西时,你不会为它们创建许多布尔标志。关键点是在您的paintComponent方法中,您必须描述在某个时间点应该绘制的