java - 如何刷新 JPanel?

标签 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”,并在其后面留下了痕迹。我已确认列表正在获取正确的数据。

最佳答案

The cells now render correctly afterwards, but it still doesn't show during the algorithm.

您的计算可能会阻塞事件分发线程。相反,使用 SwingWorker 在后台线程中迭代您的算法,如图hereherepublish() 中间结果,process() 可用于更新您的面板。

关于java - 如何刷新 JPanel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19762373/

相关文章:

java.lang.UnsupportedOperationException : Failed to resolve attribute at index 13: TypedValue{t=0x2/d=0x7f010046 a=-1} 异常

java - 如何让 Action 更顺畅?

java - 如何在java swing中垂直对齐按钮

java - .jar 文件中的图标路径

java - 如何从客户端角度使用异步方法

java - Kafka主题删除

java - 将 JFrame 的预先存在的代码放入 JPanel 中

java - 这段代码有什么问题? (JScrollPane 和 JFrame)

java - 如何调整 JPanel 的大小以适应 "docknorth"中的 JFrame 而不会干扰剩余的 JPanel

java - 在线程上运行的闪烁图像