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);
          }
      }

迷路の生成後、print ステートメントは正常に機能しますが、画像「Anno」のみが描画され、その後ろに跡が残ります。リストが正しいデータを取得していることを確認しました。

4

1 に答える 1

2

その後、セルは正しくレンダリングされるようになりましたが、アルゴリズム中にはまだ表示されません。

計算により、イベント ディスパッチ スレッドがブロックされている可能性があります。代わりに、ここここSwingWorker示されているように、パネルを更新するために使用できる中間結果を使用して、バックグラウンド スレッドでアルゴリズムを繰り返します。publish()process()

于 2013-11-04T10:58:10.403 に答える