0

こんにちは、JFrame アプリのちらつきを取り除こうとしています。setDoubleBuffered(true) は Jpanel の paintComponent に使用できますが、JFrame の paint メソッドやアプレットには使用できないことがわかりました。

ペイント メソッド内に命令 this.createbufferstrategy(2) を導入することで、ちらつきを軽減することはできましたが、なくすことはできませんでした。

しかし、最終的に、ちらつきを完全に除去するコードの例を見つけました。これは、更新関数内で静的要素を描画することによって機能します。

アプレットの update 内で fillRect をテストして動作しますが、通常の Java アプリケーションにコピーを貼り付けると、jframe の update 関数内では動作しません。

これがコードです

   Graphics graphics;
   Image image;
   public void update(Graphics g)
   {
   if (image == null) {  

   image = createImage(this.getWidth(), this.getHeight());

   graphics = image.getGraphics();  }

   graphics.setColor(Color.blue);

   graphics.fillRect(0,  0,  this.getWidth(),  this.getHeight());

   g.drawImage(image, 0, 0, this);//}

空のペイント関数を使用すると、これは画面に描画され、アプレットで青で塗りつぶされ、ちらつきもなくなります。しかし、jframe の通常のアプリケーションでは何もしません。

アプレット以外の通常のアプリケーション環境で更新内から fillRect または drawImage を機能させるには、何をする必要がありますか?

ところで、fillRect を呼び出すことによってグラフィックス オブジェクト自体が変更されている場合、私はこれに少し慣れていませんが、画像オブジェクトはどのように変更されるのでしょうか。画面を青くするには drawImage が必要だからです。

PS createbufferedstrategy と setignorerepaint の両方を使用しないようにしましたが、何も変わりません。

4

1 に答える 1

1

を使用する場合setIgnorePaint(true)、グラフィックスを台無しにすることはできません。update(Graphics g) パラメータの外観から推測すると、paintMethod のグラフィック g を使用してペイント メソッド内で呼び出します (paint メソッド内で update(g) を呼び出します)。

ペイントを無視すると、paintComponent の Graphic パラメータを使用できなくなります。グラフィックを含むすべてのコードを投稿してください (戦略を作成した場所、このメソッドを呼び出している場所など)。

ちらつきは戦略のかなり主流の問題であり、私はそれを修正できるとは約束できません (私の友人は少し前に私に問題を提起しましたが、私はそれを試して理解するほど気にしませんでした. )、しかし、少なくともグラフィックがレンダリングされない理由を説明する必要があります

于 2013-09-15T00:02:57.877 に答える