Swing アプリケーションの階層構造

last modified: Jun./28th/2002

Swing アプリケーションの階層構造

Swing コンポーネントは、アトミック・コンポーネント、中間コンポーネント、トップレベルコンポーネントの三つに階層化されています:

トップレベル・コンテナ
他の Swing コンポーネントを描画するためのコンテナ:
中間コンテナ
他の Swing コンポーネントを配置する為などに用いる:
アトミック・コンポーネント
個々の部品を表す

各クラス名に J が付いているのは、 AWT のコンポーネントと区別しているからです。対応する AWT コンポーネントを継承していることを示していると考えてください。

Swing コンポーネントを配置する為の外枠である Top-level コンテナは必須であり、そこに Intermediate コンテナを配置し、さらに Atomic コンテナを配置します。各コンテナは層として他の層の土台として働くことになります。

GUI アプリケーション作成手順

大雑把に言うと、 Swing アプリケーションを作成するには、次の手順が必要です。

  1. パッケージ java.awt.*, javax.swing.* のインポート
  2. 部品のインスタンス化
    1. トップレベル・コンテナのインスタンス化
    2. 中間コンテナのインスタンス化
    3. アトミック・コンポーネントのインスタンス化
  3. 部品の配置
    1. 中間コンテナにレイアウト・マネージャを実装
    2. レイアウト・マネージャでアトミック・コンポーネントを配置
    3. トップレベル・コンテナからコンテント・ペインの取得
    4. コンテント・ペインに中間コンテナを配置
  4. イベント処理
    1. 部品でのイベントを取得するロジックの実装
    2. イベントを処理するロジックの実装

以上が Swing アプリケーションで必要な基本的な道具です。あるものは必須ではなく、あるものは複数を組み合わせて使います。例えば、中間コンテナは必ずしも必要ではなく、レイアウトマネージャは複数組み合わせることがあります。

これらの道具の詳細は、追って説明します。

サンプル

ここで Swing アプリケーションのおおまかな枠組みを示します。

GUI_Hierarchy.java:

// awt パッケージのインポート
import java.awt.*;
// swing パッケージのインポート
import javax.swing.*;

public class GUI_Hierarchy {
	public static void main(String[] args) {

	// 部品のインスタンス化
		// トップレベルコンテナのインスタンス化
		JFrame frame = new JFrame("GUI Hierarchy");

		// 中間コンテナのインスタンス化
		JPanel panel = new JPanel();

		// アトミック・コンポーネントのインスタンス化
		JButton button = new JButton("OK");

	// 部品の配置
		// 中間コンテナにレイアウトマネージャを指定
		panel.setLayout(new BorderLayout());

		// 中間コンテナに部品を配置
		panel.add(button, BorderLayout.CENTER);

		// コンテント・ペインの取得
		Container cont = frame.getContentPane();
		// コンテントペインに中間コンテナを配置
		cont.add(panel);

	// トップレベルコンテナのセットアップ
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.pack();
		frame.setVisible(true);

	}
}

おおまかに言って、アトミック・コンポーネントを中間コンテナに配置し、中間コンテナをトップレベル・コンテナに配置することで、GUI アプリケーションの見栄えは作られます。

実行例:

C:\java>javac GUI_Hierarchy.java

C:\java>java GUI_Hierarchy
CGI_Hierarchy の実行結果
図: GUI_Hierarchy の実行結果

尚、ここではイベント処理のロジックを実装していないので、ボタンを押しても何もなりません。



Copyright © 2002 SUGAI, Manabu. All Rights Reserved.