5

この質問はあまり技術的ではないように思われるかもしれませんが、好奇心から、私はそれを知りたいです:

私が書いた裸の/生のSwingコードは、どのようにして素晴らしいグラフィカルアプリケーションになりますか?

例えば:

  • JFrameを表示するときや、JButtonを配置するときのように。誰がそれを実現させますか?OSまたはJavaまたはJVM。

  • 誰が色を浮かび上がらせますか?

  • 舞台裏で行われているプロセスは何ですか?

これは、RealWorldグラフィカルアプリケーションを作成したのが人生で初めてであり、これらの質問が頭に浮かんだためかもしれません。

前もって感謝します!

4

3 に答える 3

5

Swingでは、すべてのGUIコンポーネントは完全にJavaで記述され、Javaを使用してレンダリングされます。たとえば、JButtonは、内部OSのものではなく、Javaによって描画されます。したがって、Swingコンポーネントは、OS(またはネイティブウィジェットツールキット)ではなくJavaによって管理およびレンダリングされるため、「軽量コンポーネント」と呼ばれます。

JavaにはAWTと呼ばれるツールキットもあることに注意してください。Swingは、OSを使用してネイティブウィジェットを作成することを除いて、AWTからネストされ継承されたメソッドに基づいています。

したがって、ある時点で、Swingは画面上にウィンドウを作成して描画する必要があります。実際にウィンドウを作成する魔法はAWTによって処理されます。JFrameこれから拡張されることに注意してくださいjava.awt.Frame。つまり、JFrameは主にJavaによってレンダリングされる可能性がありますが、重量のあるネイティブOSウィンドウによって支えられています。

于 2012-06-20T20:33:10.443 に答える
1

つまり、AWTツールキットがあります。これは、すべてのウィンドウ管理と描画を行うレイヤーです。JVM内でネイティブプラットフォーム固有のコードを呼び出しています。また、java2dの描画も担当します。加速されたdirectxまたはopenglパイプラインを使用できます。

その上にSwingが開発されています。Swingは、実際にはすべてのボタンとすべてのオブジェクトをプレーンなJavaコードで描画します。描画は、コンポーネントの描画方法を決定する現在のルックアンドフィールに合わせて処理されます。したがって、ペイントメソッドをオーバーライドして、問題なく追加することができます。

MetalとNimusLaFは100%java2dで描画されるため、それらの中には、コンポーネントを描画するためのdrawRectangleやdrawLineなどがあります。Windows、GTKなどのネイティブのルックアンドフィールは、現在のオペレーティングシステムのテーマにアクセスして、ネイティブウィジェットに似たものを描画します。そのため、必ずしもネイティブアプリケーションのように見えるとは限りません。

たとえばEclipseで使用されるSWTなどのJava用の他のGUIツールキットもあります。それが行っているのは、AWTからウィンドウを取得し、それに100%ネイティブウィジェットを配置することです。OSとの統合がはるかに優れており、見た目も良く、動作も速く、メモリの使用量も少なくて済みます。ただし、これを使用すると、OS固有のネイティブライブラリを使用してアプリケーションを配布する必要があり、Swingと比較してカスタマイズ性が低くなります。

于 2012-06-20T20:45:31.963 に答える
0

詳細はわかりませんが、実際のグラフィックは、JVM自体を介してswing/awtパッケージを介して表示/レンダリングされます。

于 2012-06-20T20:33:58.057 に答える