1

これに対する答えが見つかりません。Java のループでアクティブ ペインティングを使用しようとしています。私は新しいものを作成BufferedImageし、ペイントメソッドでそのグラフィックを取得し、そのグラフィックを通常のImageように描画し、さまざまな形状を描画しますfillRect() etc.次に、 (変数名canvasで)グラフィックを描画します。BufferedImageJPanel

Graphics gr = buffer.createGraphics();
gr.drawImage(img, 0, 0, 500, 500, null);

for (int i = 0; i<200; i++){        
gr.drawOval(i*10,i*20,50,50);
etc.
}

gr.dispose();
canvas.getGraphics().drawImage(buffer, 0, 0, 500, 500, null);

JPanel で描画されたすべての形状が表示されるのはなぜですか Image なしで、最初にすべてが BufferedImage に描画され、その後すぐに別のグラフィックスに描画されると思いました (それはバッファリングについてではありませんか?)。誰かが私にこれを説明してもらえますか? グラフィックスオブジェクトに描画するスレッドは何ですか? この画像描画が実行されている場所 (paintComponent() を呼び出さずにアクティブ レンダリングを使用する場合)

4

1 に答える 1

0

グラフィックスオブジェクトに描画するスレッドは何ですか?

任意のスレッド。少し前に、この種の操作 (画像と図形を描画して表示する) を行う必要がある GIS アプリケーションを作成しました。これが私が進めた方法です:

  1. 画像とすべての形状をBufferedImage
  2. バックグラウンド スレッドから結果をJPanel.paintComponent()取得し、JPanel のグラフィックスに描画します。

このコードを実行する

canvas.getGraphics().drawImage(buffer, 0, 0, 500, 500, null);

外側paintComponentは本当に悪い考えであり、あなたが経験している問題を説明するかもしれません. これは、取得したグラフィックスがcanvas.getGraphics()レンダリング用ではなく、印刷などの操作用であるためです。

多くの問題を解決する方法でBufferedImage間違いなく描画する必要がありますJPanel.paintComponent()

于 2012-06-28T20:20:43.790 に答える