JPanelとJFrameの違いと、軽量、重量級との関係は何ですか?
4 に答える
JPanelは、複数のUIコンポーネントをまとめることができるコンテナーです。JFrameは、Swingを使用して作成されたウィンドウです。
すべてのSwingコンポーネントは、Javaで記述されているため、いわゆる「ライトウェイト」コンポーネントです。たとえば、Swingアプリケーションを実行し、UI分析ツール(たとえば、WindowsのWinSpy)を使用して分析しようとすると、ウィンドウ(JFrame)自体という1つの要素しか表示されません。他のすべてのコンポーネントは、OSの観点から描画されます。
ヘビーウェイトAPI-AWTは、OSが提供するポータブル要素を使用します。Javaはさまざまなオペレーティングシステム間で移植可能でなければならないため、AWTは非常に制限されています。すべてのプラットフォームでサポートされている画面要素の最小限のサブセットのみを実装します。ただし、AWT要素は適切なプラットフォーム要素に直接マップされるため、UI検出ツールはそれらを認識します。これらの要素は「ヘビーウェイト」と呼ばれます。
「AWT」コンポーネントのような重量のあるコンポーネントは、特定のプラットフォームでネイティブGUIを使用して描画する必要があります。
「Swing」コンポーネントのような軽量コンポーネントがJavaによって描画され、ネイティブGUIに依存しない場合。
SwingとAWTの基本的な違いは、Swing APIは純粋にJavaライブラリであるということです。つまり、グラフィカルコンポーネントを描画するためにネイティブライブラリにまったく依存していません。この機能により、すべてのプラットフォームで一貫したルックアンドフィールを提供します。AWTライブラリは、ネイティブグラフィックライブラリのサポートを必要とし、それらのGUIコンポーネントの一部はプラットフォームごとに異なって見えます。さらに、Swingコンポーネントは本質的にスレッドセーフではないため、同期コードを明示的に記述して操作または再描画する必要がありますが、AWTコンポーネントはマルチスレッド環境で信頼できます。AWTコンポーネントは、ネイティブライブラリに依存しているため、ヘビーウェイトコンポーネントと呼ばれます。Swingコンポーネントは、ネイティブライブラリに依存しないため、軽量と呼ばれます。
JFrameはインターフェイスボックスを備えたSwingコンテナであり、スタンドアロンアプリケーション(最小化、最大化、および終了する機能を備えたトップボックスを備えています)にすることができますが、JPanelはJFrame(Swingコンテナ)からスタンドアロンになります。JPanelが機能するには、JFrameのようなフレームのようなものの中にある必要があります。
もう1つの答えは、軽量コンポーネントと重量コンポーネントの適切な定義です。
使用:JFrame内でJPanelsを使用して、一緒に統合するマルチスレッドプログラムを簡単に実行します(クラス内にJFrameを拡張するJPanel実行可能クラスがあり、それを独自のスレッドとして実行すると、JPanelクラスはJFrameクラスの変数の値を変更できます)。私はこれを使用して、さまざまなスレッドを簡単に相互作用させます。**JFrame内に複数のJPanelを含めることができます。