我试图在JPanel上绘制一个网格但是当我在循环中调用重绘方法时它只能运行一次.这是我的代码:
public class Board extends JPanel{
// --- Set Density of Grid ---
public final int lines = 10;
// ---------------------------
public final int width = 600;
public final int height = 600;
public Point p1 = new Point(0,0);
public Point p2 = new Point(0,0);
public Board() {
int c0 = width/lines;
for (int j=0; j<2; j++){
int c1 = width/lines;
for (int i=0; i<lines; i++){
if (j==0){
p1 = new Point(c1,0);
p2 = new Point(c1,height);
}
if (j==1){
p1 = new Point(0,c1);
p2 = new Point(width,c1);
}
c1 = c1 + c0;
repaint();
}
}
}
public void drawGrid(Graphics g){
g.drawLine(p1.x, p1.y, p2.x, p2.y);
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
drawGrid(g);
System.out.println("Inside");
}
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
Inside
Run Code Online (Sandbox Code Playgroud)
当我使用for循环时,如何多次调用paintComponent方法?
该repaint()
方法只是RepaintManager
向绘制组件发出请求.然后,RepaintManager
将把多个请求合并到一个组件的绘画中,以使绘画更有效.因此,因为您的所有请求都是在循环中彼此在纳秒内完成的,所以它们都会合并到一个请求中.
如果你想要某种动画,那么你需要使用Swing Timer来安排动画.因此,每次Timer触发时,您都会将索引增加1.