3

我正在创建一个小型 JPanel 程序来生成迷宫。我所有的代码都有效,但我想展示迷宫生成的实际效果。我编辑了我的程序以使paintComponent 函数显示正在进行的迷宫。但是我在另一个类中,它正在传递我的 JPanel 对象,因此它可以“刷新”显示。

我应该怎么做才能调用paintComponent函数来绘制所有单元格并刷新显示?

这是面板的配置:

JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
gamePanel = new GamePanel();
controlPanel = new ControlPanel();
mainPanel.add(gamePanel, BorderLayout.CENTER);
mainPanel.add(controlPanel, BorderLayout.SOUTH);
mainPanel.revalidate();

这是预期在重绘时调用的代码:

protected void paintComponent(Graphics pen){
      if(started){
          int count=0;
          for (MapCell c:coms){
              if (c.type!='w'){
                  count++;
              }
              c.paint(pen);
          }
          System.out.println("White space: " +count);
          System.out.println("Components: "+coms.size());
          for(Anno an:mapGen.ans){
              an.draw(pen,img,colWidth,rowHeight);
          }
      }

迷宫生成后打印语句工作正常,但仅绘制图像“Anno”并在其后面留下痕迹。我已确认该列表正在获取正确的数据。

4

1 回答 1

2

之后单元格现在可以正确渲染,但在算法过程中仍然没有显示。

您的计算可能阻塞了事件调度线程。相反,在后台线程中使用 迭代您的算法,如此此处SwingWorker所示,以及可用于更新面板的临时结果。publish()process()

于 2013-11-04T10:58:10.403 回答