gpt4 book ai didi

java - 循环中的 repaint() 仅调用一次 - Java

转载 作者:行者123 更新时间:2023-12-01 16:53:57 26 4
gpt4 key购买 nike

我试图在 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");
}

}

这是输出:

Inside

使用for循环时如何多次调用paintComponent方法?

最佳答案

repaint() 方法只是向 RepaintManager 发出请求来绘制组件。然后,RepaintManager 会将多个请求合并到组件的单个绘制中,以使绘制更加高效。因此,由于您的所有请求都是在循环中的纳秒内发出的,因此它们都会合并为一个请求。

如果您想要某种动画,那么您需要使用 Swing Timer安排动画。因此,每次计时器触发时,您都会将索引增加一。

关于java - 循环中的 repaint() 仅调用一次 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35348719/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com