このコードでは:
_JLabel emptyLabel = new JLabel("");
emptyLabel.setPreferredSize(new Dimension(175, 100));
frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);
_
新しいラベルが作成され、JFrame
オブジェクトframe
に追加されることがわかります。しかし、私はgetContentPane()
が何をするのか、そしてなぜそれが必要なのかを理解したいのですか?
このAPI を読みましたが、まだ理解できませんでした。
すべてのJPanel
はコンテナであるため、パネルに追加してからコンテナに追加するか、add(component)
を直接使用するか、getContentPane().add
メソッドを使用します。両方ともJava 7でコンテナにコンポーネントを追加します(バージョン6でこれに問題があるかどうかわかりません)。
すべてのSwingトップレベルコンテナ(およびJInternalFrame)には、JRootPane
と呼ばれるものがあります。これは、ウィンドウの全体的なレイアウトを実際に管理する役割を果たします。
ルートペインには多数のレイヤーがあり、そのうちの1つはコンテンツペインです。フレームに何かを追加すると(Java 5だと思います)、自動的にコンテンツペインに追加されます。この前に、自分でgetContentPane().add(...)
を呼び出す必要がありました。
RootPanesの使用方法 をご覧ください
containerにはいくつかのレイヤーがあります。レイヤーは、containerをオーバーレイする透明なフィルムと考えることができます。 Java Swingでは、オブジェクトを保持するために使用されるレイヤーはcontentペインと呼ばれます。オブジェクトはcontainerのコンテンツペインレイヤー。
getContentPane()メソッドは、コンテンツペインレイヤーを取得します。オブジェクトを追加します。コンテンツペインは、Javaランタイム環境によって作成されたオブジェクトです。コンテンツペインを使用するために名前を知る必要はありません。 getContentPane()
を使用すると、そこにコンテンツペインオブジェクトが置き換えられ、メソッドを適用できるようになります。
JFrameは、他のサブコンポーネントと一緒に配置されるヘッドコンポーネントです。 getContentPane()を使用すると、グラフィカルユーザーインターフェイスのコンテンツを表すコンポーネントが取得されます。たとえば、JMenuBarは、フレームのcontentPaneの隣の別の領域に配置されます。