在主要类中调用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);
}
}
答案 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
方法来指示是否应绘制矩形。