1

通常のアプリケーション プロファイルに適合しない Java Swing アプリケーションを開発しています。これにはタブ付きペイン (およびその他のパネル) が含まれ、各タブにはアクティブなレンダリング (一度に 1 つのスレッドのみがペイントされる) を含む Canvas が含まれます。

問題は、メイン アプリケーション ウィンドウのサイズを変更すると、キャンバスの内容が表示されず (マウスのドラッグを止めると表示される)、その理由がわかりません。また、一部のチュートリアルでは、コンテンツをバッファリングされた画像にレンダリングしていることにも気付きました。

http://jamesgames.org/resources/double_buffer/double_buffering_and_active_rendering.html

それがキャンバスがちらつく理由でしょうか(チュートリアルのバッファリングされた画像は、タイトルバーのオフセットを削除するためにのみ使用されたと理解しています)?

GUI は次のように構成されています。

JFrame 
  - TabbedPane
      - ScrollPane
          - Canvas 1
      - ScrollPane
          - Canvas 2
  - JPanel
    - labels,buttons,..

コード:

class Renderer extends Canvas implements Runnable
{
   Thread hThread = null;
   BufferStrategy strategy = null;  

   Renderer()
   {
       setIgnoreRepaint(true);
   }

   public void run()
   {
         while(active)
         {  
              g = strategy.getDrawGraphics();

              draw(g); // renderer elements

              strategy.show();
              g.dispose(); 
         }
   }

   // Called when switched to in Tabbed pane
   public void start()
   {
       createBufferStrategy(2); 
       strategy = getBufferStrategy();
       hThread = new Thread(this); 
       hThread.start();
   }

   // Called when switched off in Tabbed pane
   public void stop(){
       hThread.stop();
   }

} 
4

2 に答える 2

1

ダブル バッファリング手法は、高速描画コードのちらつきを軽減または排除するためのものです。これは、BufferStrategy を介して (内部的に BufferedImage を使用して) 達成する必要があるものです。

これは正しい方向に向かうように見えます:AWTカスタムレンダリング - スムーズなサイズ変更をキャプチャし、サイズ変更のちらつきを排除します (編集:このリンクは実際にはサイズ変更の問題を解決しません)

于 2012-04-23T20:32:01.790 に答える
1

私の問題を修正しました。解決策は、JScrollPane を削除して JPanel に置き換えることでした。次に、キャンバスを JPanel に追加し、自分で (JScrollBar を使用して) スクロールを処理します。キャンバスがちらつくことはなくなり、サイズ変更のパフォーマンスも向上しました。

于 2012-05-04T14:04:07.433 に答える