在java中,如何在要执行的代码中添加延迟?

1zmg4dgp  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(376)

这个问题在这里已经有答案了

如何暂停/延迟,代码的特定部分(2个答案)
上个月关门了。
我试着用dfs构建一个迷宫生成器。我已经成功地实现了这个算法,但它不是可视化的(即,只要我运行程序,整个网格就会着色,但我希望看到每个框实时着色)。
下面是draw类,如果框被标记为已访问(按算法),它将绘制网格并为其着色。

class Draw extends JPanel{

    public Draw() {}

    public void paintComponent(Graphics g1) {
        super.paintComponent(g1);
        Graphics2D g= (Graphics2D) g1;
//Code Below makes the grid
for(Cell c: Maze_Generator.list) {  //Maze_Generator.list, this is ArrayList, storing all the cells/boxes objects
            //Cell c =(Cell)a;
            if(c.top())
                g.drawLine(c.x(), c.y(), c.x()+c.length(), c.y());
            if(c.bottom())
                g.drawLine(c.x(), c.y()+c.length(),c.x()+c.length(),c.y()+c.length());
            if(c.left())
                g.drawLine(c.x(), c.y(), c.x(), c.y()+c.length());
            if(c.right())
                g.drawLine(c.x()+c.length(), c.y(), c.x()+c.length(), c.y()+c.length());
        }

//Code below colours the boxes if marked visited
        for(Cell c:Maze_Generator.list) {
            if(c.visited()) {
                g.setColor(Color.cyan);
                g.fillRect(c.x()+1, c.y()+1, c.length()-1, c.length()-1);
                g.setColor(Color.black);
            }
        }
    }

}

在给方框着色时,我应该做什么以及如何减慢/延迟代码?有什么建议吗?

0wi1tuuw

0wi1tuuw1#

你需要一个计时器,否则你会阻塞你的主线程。这应该是可行的,但要改进它以满足您的需要:

// add necessary imports first:
import javax.swing.Timer;
import java.awt.event.ActionListener;
int milliseconds = 500;
for(Cell c:Maze_Generator.list) {
    if(c.visited()) {
        fillRect(milliseconds, g, c.x()+1, c.y()+1, c.length()-1, c.length()-1);
        milliseconds += 500;
    }
}

添加此方法:

private void fillRect( int delay, Graphics2D g, int x, int y, int width, int height ) {
        Timer timer = new Timer(delay, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                g.setColor(Color.cyan);
                g.fillRect(x, y, width, height);
                g.setColor(Color.black);
            }
        });
        timer.setRepeats( false );
        timer.start();
    }

相关问题