java - "paintComponent()"重画

标签 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() 方法但使用错误?

最佳答案

无论您在 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();
    }
}

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

关于java - "paintComponent()"重画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23397582/

相关文章:

java - 尝试解析 XML 并将信息显示到 GUI 上

java - 奇怪的j面板漆

java - 获取 NullPointerException 处理由 JAXB 解码的对象模型

java - 为什么这个泛型引用不能指向Java中这个类似的扩展类?

java - Spring 中是否有 ServiceLoader 的类似物以及如何使用它?

java - JTextPane 不可变文本 block

java - 删除 JTable 中选定的复选框行(单个和多个)

HTML 对象的 Java 表示

java - 为什么油漆不起作用?

java - 用于在 Linux 上创建 Java 守护程序服务的工具