Java &引用;paintComponent();重新油漆

Java &引用;paintComponent();重新油漆,java,swing,paint,java-2d,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.drawOva

我使用
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()
方法,但我用错了吗

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);
    }
}

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);
    }
}

无论您在
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
方法中,你必须描述在某个时间点应该画什么)

无论您在
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
方法中,你必须描述在某个时间点应该画什么)

It help for me repaint();超级。油漆组件(g);。但它是正确的吗?它帮助我重新绘制();超级。油漆组件(g);。但这是正确的吗?