如何使用repaint调用java paintComponent

时间:2014-11-22 13:36:19

标签: java swing paint paintcomponent repaint

在主要类中调用this视频drawing()方法。当我们在main方法中删除drawing()时,它仍会绘制形状。我们怎样才能避免这种情况?

形状类:

import java.awt.*;
import javax.swing.*;
public class shapes{
public static void main(String[] args){
    JFrame frame = new JFrame("Test");
    frame.setVisible(true);
    frame.setSize(400,200);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    draw object = new draw();
    frame.add(object);

    object.drawing();
    }

}

画班:

import java.awt.*;
import javax.swing.*;

public class draw extends JPanel{
public void drawing(){
    repaint();
}
public void paintComponent(){
  super.paintComponent(g);
  g.setColor(Color.BLUE);
  g.fillRect(10,15,100,100);
  }
}

1 个答案:

答案 0 :(得分:2)

代码存在一些小问题,但我认为它只是一个用于演示目的的小片段。有关详细信息,请查看Performing Custom Painting

实际上,本教程也会回答您的问题,但总结一下:

每当必须重新绘制组件时,操作系统"将自动调用paintComponent方法。对repaint()的调用仅告知操作系统尽快再次呼叫paintComponent。因此,您可以致电repaint()以确保您的内容尽快出现在屏幕上。

如果您明确要启用/禁用某些绘制操作,则无法通过阻止调用paintComponent来影响此操作。它无论如何都会被调用。相反,您将引入一些标志或状态,指示是否应该绘制某些东西。

在你的例子中,这可以大致这样做:

import java.awt.*;
import javax.swing.*;

public class Draw extends JPanel{
    private boolean paintRectangle = false;

    void setPaintRectangle(boolean p) {
        paintRectangle = p;
        repaint();
    }

    @Override
    public void paintComponent(){
        super.paintComponent(g);

        if (paintRectangle) {
            g.setColor(Color.BLUE);
            g.fillRect(10,15,100,100);
        }
    }
}

然后,您可以调用setPaintRectangle方法来指示是否应绘制矩形。