モジュール java.desktop
パッケージ javax.swing

クラスJRootPane

java.lang.Object
すべての実装されたインタフェース:
ImageObserver, MenuContainer, Serializable, Accessible

public class JRootPane extends JComponent implements Accessible
JFrameJDialogJWindowJApplet、およびJInternalFrameによって内部的に使用される軽量コンテナ。 ルート・ペインが提供するタスク指向の情報については、『The Java Tutorial』の「How to Use Root Panes」を参照してください。

次のイメージはルート・ペインを使用するクラス間の関係を示します。

次の文は、この図について説明しています。

「重量」コンポーネント(ピアまたはホスト・システム上のネイティブ・コンポーネントに委譲するコンポーネント)は濃く重そうなボックスで示されています。 4つの重量JFC/Swingコンテナ(JFrameJDialogJWindow、およびJApplet)は、それらが拡張するAWTクラスとの関連で示されています。 Swingライブラリ内の重量コンテナはこれら4つのコンポーネントのみです。 また、軽量コンテナのJInternalFrameも示されています。 これら5つのJFC/SwingコンテナはすべてRootPaneContainerインタフェースを実装し、処理をJRootPane (上部に小さな「ハンドル」が付いている)に委譲します。
ノート: JComponentのメソッドgetRootPaneを使用すると、指定されたコンポーネントを格納しているJRootPaneを取得できます。

例:

この図については次の文で説明しています。

右側の図はJRootPaneの構造を示しています。 JRootpaneは、glassPane、オプションのmenuBar、およびcontentPaneから成ります。 JLayeredPanemenuBarcontentPaneを管理します。 glassPaneはすべてのコンポーネントのいちばん上に置かれ、マウスの動作を捕捉します。 glassPaneは(contentPaneと同様に)、任意コンポーネントにすることができるので、描画のためにglassPaneをセット・アップすることもできます。 glassPane上の線とイメージは、境界に制限されることなく、下のフレーム全体を覆うことができます。

menuBarコンポーネントはなくてもかまいませんが、layeredPanecontentPane、およびglassPaneは必ず必要です。 これらをnullに設定しようとすると、例外が生成されます。

JRootPaneにコンポーネントを追加するには(オプションのメニュー・バーと異なり)、次のようにJRootPanecontentPaneにオブジェクトを追加します。

       rootPane.getContentPane().add(child);
 
同様の原則が、レイアウト・マネージャの設定、コンポーネントの削除、および子のリスト表示などでも適用されます。これらのメソッドはすべてJRootPaneではなく、contentPaneで呼び出されます。
ノート: contentPaneのデフォルトのレイアウト・マネージャはBorderLayoutマネージャです。 ただし、JRootPaneはカスタムLayoutManagerを使用します。 したがって、JRootPaneに追加したコンポーネントのレイアウト・マネージャを変更するときは、必ず次のようなコードを使用してください。
    rootPane.getContentPane().setLayout(new BoxLayout());
 
JMenuBarコンポーネントがJRootPaneで設定された場合は、フレームの上端に沿って配置されます。 contentPaneの位置とサイズは、残りの領域に収まるように調整されます。 JMenuBarcontentPaneは、JLayeredPane.FRAME_CONTENT_LAYERレイヤーのlayeredPaneコンポーネントに追加されます。

layeredPaneJRootPaneのすべての子の親(メニューの直接の親、およびcontentPaneに追加されたすべてのコンポーネントの親の両方)です。 layeredPaneは、複数のレイヤーでコンポーネントを追加する機能を提供するJLayeredPaneのインスタンスです。 この機能は、メニュー・ポップアップやダイアログ・ボックスでの作業およびドラッグなど、コンポーネントをペイン内のほかのすべてのコンポーネントのいちばん上に配置する必要がある場合にとても便利です。

glassPaneJRootPaneのほかのすべてのコンポーネントのいちばん上に置かれます。 これにより、ほかのすべてのコンポーネントの上に描画するのに都合のよい場所が提供され、ドラッグや描画のときに便利なマウス・イベントの捕捉が可能になります。 glassPanesetVisibleを使用すると、いつglassPaneがほかの子の上に表示されるかを制御できます。 デフォルトでは、glassPaneは可視ではありません。

JRootPaneによって使用されるカスタムLayoutManagerは次のことを保証します。

  1. glassPaneJRootPane (境界 - イン・セット)の表示可能領域全体を埋める。
  2. layeredPaneJRootPane(境界 - イン・セット)の表示可能領域全体を埋める。
  3. menuBarlayeredPaneの上端に配置される。
  4. contentPaneは、menuBarを除いた(存在する場合)表示可能領域全体を埋める。
JRootPaneのビュー階層のほかのビューはすべて無視されます。

JRootPaneLayoutManagerを置換する場合は、これらのビューすべてを管理する必要があります。 したがって、通常はJRootPaneではなくcontentPaneのレイアウト・マネージャを変更するようにしてください。

Swingのペイント・アーキテクチャでは、不透明なJComponentが包含関係の階層の中でほかのすべてのコンポーネントの上に存在する必要があります。 通常、これはコンテンツ・ペインによって提供されます。 コンテンツ・ペインを置き換える場合は、setOpaque(true)によってコンテンツ・ペインを不透明にすることをお薦めします。 また、コンテンツ・ペインによってpaintComponentがオーバーライドされる場合は、バックグラウンドをpaintComponentの不透明な色で完全に塗りつぶす必要があります。

警告: Swingはスレッドに対して安全ではありません。 詳細は、「Swing's Threading Policy」を参照してください。

警告: このクラスの直列化されたオブジェクトは、今後のSwingリリースと互換ではなくなる予定です。 現在の直列化のサポートは、短期間の格納や、同じバージョンのSwingを実行するアプリケーション間のRMIに適しています。 1.4では、すべてのJavaBeansの長期ストレージのサポートがjava.beansパッケージに追加されました。 XMLEncoderを参照してください。

導入されたバージョン:
1.2
関連項目: