[英]How to call java paintComponent using repaint
在此视频中,在主类中调用了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);
}
}
该代码有一些小问题,但我认为这只是一小段用于演示目的。 有关详细信息,请参见“ 执行自定义绘画” 。
实际上,本教程也可以回答您的问题,但总结一下:
每当必须重新绘制组件时,都会自动“通过操作系统”调用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
方法以指示是否应绘制矩形。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.