« デジカメ購入検討 - 購入 | トップページ | Eclipse3.3 JDTが使用しているコンパイラのバージョン確認方法 »

2007/10/31

Swing入門以前 - Swingの概念モデル(2) - root pane

前回使用したJFrameのgetContentPaneメソッド定義コードを見てみる。すると、以下のように記述されている。

public Container getContentPane() {
    return getRootPane().getContentPane();
}

フレームから取得していたと思っていたコンテンツ区画(content pane)は、実際にはフレームのルート区画(root pane)から取得していることがわかる。

root区画はJFrameのフィールドrootPaneとして定義されており、これは本当にフレームの部品であることがわかる。(さらにいうと、JRootPaneクラスにちゃんとcontentPaneフィールドが定義されている。)

この情報を基に、前回の概念図を修正すると、以下のようになる。

swing04_root_pane

つまり、トップレベルコンテナ(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のサイトにあるような、下図に示したものとなる。 

swing05_all_panes

前述の通り、ルート区画上に3つの区画「階層化区画」「コンテンツ区画」「ガラス区画」が乗っているイメージであるが、3つの上下関係の概念はなぜこの図のようになっているのか、次回調査していきたい。

|

« デジカメ購入検討 - 購入 | トップページ | Eclipse3.3 JDTが使用しているコンパイラのバージョン確認方法 »

プログラミング」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/18902/16927626

この記事へのトラックバック一覧です: Swing入門以前 - Swingの概念モデル(2) - root pane:

« デジカメ購入検討 - 購入 | トップページ | Eclipse3.3 JDTが使用しているコンパイラのバージョン確認方法 »