2012-04-02 3 views
0

SwingがJavaで完全に記述され、ヘビーウェイト(HW)の祖先のウィンドウを再利用する場合、その背後にある論理は何ですか? スイングがHWコンポーネントクラスを拡張すると、HWコンポーネントはネイティブコールを呼び出すため、ネイティブコールが呼び出されるようになります。 しかし、スイングは軽量なので、私の理解は失敗していますか?SwingがコードレベルでHeavyWeight Ancestorのネイティブウィンドウを再利用する方法

答えて

0

Swingグラフィックスが描画されるネイティブコンポーネントは、Javaクラス階層の一部ではありません。 で、ヘビーウェイトと呼ばれる特定のコンポーネントがありますが、それらのグラフィックバッキングがネイティブコンポーネントに多かれ少なかれ直接対応しているためです。

ほとんどのSwingコンポーネントは、ビジュアル階層のヘビーウェイト祖先によって提供されるバッファにペイントします。その重い祖先は、Java描画されたグラフィックスをネイティブコンポーネントに移動して表示させる責任があります。

+0

最終的に描画はネイティブ環境で実行されていますが、今はインターフェイスがこのステップを処理するために存在し、このバッファがグラフィックス描画を担当しているので、ヘビーウェイトとライトウェイトコンポーネントが両方ともほぼ同じ時間か両方とも高価であるとみなすことができます –

+0

私が記述したこと以外にも、ネイティブ操作がいつどこで適用されるかはAWTの内部実装によって決まります。実装によっては、単にイメージバッファをコピーすることもあれば、Graphics2Dリクエストを使用可能なキャンバス上のネイティブグラフィックプリミティブに変換するものもあります。 – technomage