Java 如何刷新JPanel?

Java 如何刷新JPanel?,java,swing,jpanel,Java,Swing,Jpanel,我正在创建一个小型JPanel程序来生成迷宫。我所有的代码都可以工作,但我想显示迷宫生成的实际效果。我编辑了我的程序,使paintComponent函数显示正在进行的迷宫。但我在另一个类中,该类正在传递我的JPanel对象,以便它可以“刷新”显示 我应该怎么做才能调用paintComponent函数来绘制所有单元格并刷新显示 这是面板的配置: JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BorderLayout()); gam

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

单元现在可以在之后正确渲染,但在算法期间仍不会显示


您的计算可能阻塞了事件分派线程。相反,在后台线程中迭代算法,如图和所示,并使用
publish()
临时结果,
process()
可用于更新面板。

调用
repaint()
对组件强制重新绘制。@camickr我已经尝试过了,但它甚至没有调用paintComponent。那么,您的代码有问题。面板必须显示在可见的GUI上,并且其大小必须大于零。可能您只是创建了面板并将其添加到GUI中,但没有重新验证父面板。@camickr不,代码在文章中now@Gregor:尝试使用repaint()而不是revalidate():-我也没有在任何地方看到“setVisible(true)”。你确定你真的在启用你的UI吗?