私の質問は、JFrame で直接描画する場合と比較して、JPanel で描画する場合、同じスイング カスタム ペインティング ルーチンが約 16 倍高速なのはなぜですか? ダブルバッファリングだけですか?ありえないですよね?
背景: JFrame が非表示になっている場合 (特に部分的にのみ非表示になっている場合)、カスタム ペインティングが更新されないという問題がありました。SO を検索した後、JPanel のサブクラスをブラディ NetBeans フォーム デザイナー フォームに接続する方法を見つけ出すことにしました。
同じ状況にある人のために: NetBeans では、たまたま JPanel を拡張する新しい標準クラス (JPanel フォームではない) を作成し、そこにすべてを手動でコーディングする必要があります (古き良き時代のような GUI デザイナーは必要ありません)。はぁ)。次に、標準の JPanel をフォームに追加し、サイズを設定します。次に、右クリックして「コードのカスタマイズ」を選択し、コンボボックスで「カスタム作成」を選択します...ここで、新しい javax.swing.JPanel を作成し、そのサブクラスを置き換えます。
だから...これにより、フォームに直接ではなく、「適切に実行」してコンポーネントにペイントすることができました。また、パネルのキーリスナーは、フレームのキーイベントディスパッチャーをハイジャックするよりもはるかに優れたソリューションです。
とにかく、プロファイラーは、JPanel の paintComponent() で JFrame の paint() を並置した場合とまったく同じカスタム ペイント コードがほぼ 16 倍高速に実行されることを示しています。
前もって感謝します。キース。
編集:この質問は、MISINTERPRETED METRICS に基づいています。プロファイラーは JPanel の paintComponent() メソッドを AWT-EventQueue スレッドに含めたり報告したりしませんが、私のベースライン プロファイルには JFrame の paint() メソッドが含まれています。ばかげた質問をする前に、もっと注意深く見るべきでした。私の悪い。