Swing入門以前 - Swingの概念モデル(2) - root pane
前回使用したJFrameのgetContentPaneメソッド定義コードを見てみる。すると、以下のように記述されている。
public Container getContentPane() {
return getRootPane().getContentPane();
}
フレームから取得していたと思っていたコンテンツ区画(content pane)は、実際にはフレームのルート区画(root pane)から取得していることがわかる。
root区画はJFrameのフィールドrootPaneとして定義されており、これは本当にフレームの部品であることがわかる。(さらにいうと、JRootPaneクラスにちゃんとcontentPaneフィールドが定義されている。)
この情報を基に、前回の概念図を修正すると、以下のようになる。
つまり、トップレベルコンテナ(top-level container)とコンテンツ区画の間にもう1階層存在していたことになる。
より正確に記述すると、ルート区画には、上図の「メニューバー」「コンテンツ区画」の他に2個「階層化区画(layered pane)」「ガラス区画(glass pane)」、計4個の区画を持っている (レイアウトについては、前回から引き続き説明を省略。また別の機会に)。
メニューバーを除く3つの区画は、JRootPaneのコンストラクタで作成されている。
public JRootPane() {
setGlassPane(createGlassPane());
setLayeredPane(createLayeredPane());
setContentPane(createContentPane());
setLayout(createRootLayout());
setDoubleBuffered(true);
updateUI();
}
メニューバーは前回記載した通りオプションであるため、必要になった時点で作成される。
以上をまとめ、最終的な概念図として、Sunのサイトにあるような、下図に示したものとなる。
前述の通り、ルート区画上に3つの区画「階層化区画」「コンテンツ区画」「ガラス区画」が乗っているイメージであるが、3つの上下関係の概念はなぜこの図のようになっているのか、次回調査していきたい。
最近のコメント