Java Swing チュートリアル:堅牢な GUI アプリケーション構築
Java の Swing とは?
Java Swing は、Abstract Window Toolkit(AWT)を拡張した洗練されたプラットフォーム非依存の GUI ツールキットです。ボタン、テーブル、ツリーなど豊富なウィジェットを提供し、基本コンポーネントを再発明せずに洗練されたデスクトップアプリケーションを作成できます。
Java Foundation Classes(JFC)の一部として、Swing は AWT のコア機能をベースにしつつ、軽量でカスタマイズ可能なコンポーネントを提供します。その結果、ルックアンドフィール変更、カスタムペインティング、データバインディングなど高度な UI 機能をサポートするフレームワークになっています。
このチュートリアルで習得する内容:
- Swing の概要と重要性
- コンテナクラスとその役割
- Java GUI 開発の基本概念
- 実践例によるステップバイステップ GUI 作成
- 一般的なレイアウトマネージャーとユースケース
- BorderLayout、FlowLayout、GridBagLayout の詳細
Java Swing クラス階層図
すべての Swing コンポーネントは JComponent を継承し、コンテナクラスに追加できます。
コンテナクラスとは?
コンテナクラスはあらゆる Swing UI の骨格です—他のコンポーネントを保持し配置します。最低限、Swing アプリケーションには1つのコンテナが必要です。主要なコンテナタイプは3つ:
- JPanel – 軽量で非ウィンドウのコンテナ。コンポーネントのグループ化に使用
- JFrame – タイトルバー、ボーダー、システムメニューを持つトップレベルウィンドウ
- JDialog – モーダルまたはモードレスのポップアップウィンドウ。ユーザープロンプト用
Java の GUI とは?
Java の グラフィカルユーザーインターフェース(GUI) は、ユーザーがアプリケーションと対話するための直感的なビジュアル層を提供します。ボタン、ラベル、テキストフィールドなどのウィジェットを組み立てることで、開発者は内部ロジックを抽象化した魅力的な体験を創造します。
Java で GUI を構築する手順(ステップバイステップ)
基本ウィンドウの作成からコンポーネント追加まで、実践的なウォークスルーを示します。
ステップ 1 – 新しい Java ファイルを作成
以下のコードをエディタにコピー:
import javax.swing.*;
class GuiDemo {
public static void main(String[] args) {
JFrame frame = new JFrame("My First GUI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
JButton button = new JButton("Press");
frame.getContentPane().add(button);
frame.setVisible(true);
}
}
ステップ 2 – コンパイルと実行
ファイルを保存し、javac GuiDemo.java でコンパイル、java GuiDemo で実行。ボタン1つを含む 300×300 のウィンドウが表示されます。
ステップ 3 – もう1つボタンを追加
コードを修正して2つ目のボタンを追加:
import javax.swing.*;
class GuiDemo {
public static void main(String[] args) {
JFrame frame = new JFrame("My First GUI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
JButton button1 = new JButton("Button 1");
JButton button2 = new JButton("Button 2");
frame.getContentPane().add(button1);
frame.getContentPane().add(button2);
frame.setVisible(true);
}
}
ステップ 4 – レイアウトの問題を観察
実行すると2つのボタンが重なって表示されます。JFrame のデフォルトレイアウトマネージャーは BorderLayout で、コンポーネントを5つの領域に配置します。領域を指定しないと、後から追加したコンポーネントが前のものを置き換えてしまいます。
Java レイアウトマネージャー
レイアウトマネージャーはコンテナ内でのコンポーネント配置を制御します。適切なマネージャー選択はレスポンシブで保守しやすい GUI に不可欠です。よく使われるマネージャー:
- BorderLayout
- FlowLayout
- GridBagLayout
- BoxLayout(ここでは未カバー)
BorderLayout
BorderLayout はコンテナを NORTH、SOUTH、EAST、WEST、CENTER の5領域に分割します。JFrame のデフォルトマネージャーです。
FlowLayout
FlowLayout はコンポーネントを順番に1行に配置し、必要に応じて次の行に折り返します。JPanel のデフォルトマネージャーです。
GridBagLayout
GridBagLayout は最大の柔軟性を提供し、コンポーネントが複数行・列を占有し、グリッド内で精密に配置できます。
例:シンプルなチャットウィンドウの構築
以下はメニュー、テキストエリア、コントロールパネルを組み合わせた統合的なチャットインターフェースを示す完全プログラムです。
解答を見る前に自分でコーディングしてみてください。
// メニュー、テキストエリア、コントロールを含む完全な Swing アプリケーション
import javax.swing.*;
import java.awt.*;
class GuiDemo {
public static void main(String[] args) {
JFrame frame = new JFrame("Chat Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
// メニューバー
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("FILE");
JMenu helpMenu = new JMenu("Help");
menuBar.add(fileMenu);
menuBar.add(helpMenu);
JMenuItem openItem = new JMenuItem("Open");
JMenuItem saveItem = new JMenuItem("Save as");
fileMenu.add(openItem);
fileMenu.add(saveItem);
// FlowLayout(デフォルト)のボトムパネル
JPanel panel = new JPanel();
panel.add(new JLabel("Enter Text"));
panel.add(new JTextField(10));
panel.add(new JButton("Send"));
panel.add(new JButton("Reset"));
// 中央のテキストエリア
JTextArea textArea = new JTextArea();
// BorderLayout でフレームにコンポーネント追加
frame.getContentPane().add(BorderLayout.SOUTH, panel);
frame.getContentPane().add(BorderLayout.NORTH, menuBar);
frame.getContentPane().add(BorderLayout.CENTER, textArea);
frame.setVisible(true);
}
}
Java
- C#でPLCnextコンソールアプリケーションを開発:初心者ガイド
- JlinkでPLCnext Control上のJava 9アプリを最適化
- Microsoft AzureへのJava EEアプリケーションデプロイ:ステップバイステップガイド
- VHDLで文字列リストを作成する: ベスト・プラクティスと実装例
- Java配列チュートリアル:宣言、生成、初期化の完全ガイド
- Javaオブジェクト配列の作成:ステップバイステップガイド
- Java 乱数生成:Random クラスと Math.random 実践ガイド
- Java BufferedReader でファイル読み込み:実践ガイドと例
- JavaでcharをStringに変換する方法:実践例とベストプラクティス
- Javaで再帰を使って文字列を反転させる方法
- Java 10のアプリケーションクラスデータ共有(AppCDS)で起動高速化