如何刷新JPanel?

时间:2013-11-04 05:52:30

标签: java swing jpanel

我正在创建一个小型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”,并在其后面留下痕迹。我已经确认列表正在获取正确的数据。

1 个答案:

答案 0 :(得分:2)

  

之后,单元格会正确呈现,但在算法期间仍未显示。

您的计算可能会阻止事件派发线程。相反,使用SwingWorker在后台线程中迭代您的算法,如herehere以及publish() process()可用于更新面板的中间结果