HelloWorldアプリケーションを作る

はじめに

Windowsアプリケーションを作る一番一般的な方法は、VisualBasicを使う事でしょう。このページでは、VisualBasicで作ったようなGUIを持つアプリケーションを、Javaを使って作って行きます。

開発環境

Java 2 Standard Edition v1.4 SDKを使用します。下記リンクを参照して、環境を構築してください。環境変数の設定をお忘れなく。

アプリケーションとしての最小コード

まず、Javaアプリケーションとしての最小コードを書いてみます。これは、なーんにもしないで終了するだけのアプリケーションです。

public class HelloWorld {
    public static void main(String[] args) {
        //
        // 処理コードをここに追加する。
        //
    }
}

コンパイルと実行

上のコードを"HelloWorld.java"というファイル名で保存し、コンパイルします。

javac HelloWorld.java
すると"HelloWorld.class"というファイルが出来るはずです。次にこれを実行します。
java HelloWorld
なーんにもしないで、アプリケーションが終了します。味気ない…。

HelloWorldを表示する

何にもしないアプリケーションでは無いほうがマシなので、ここではコマンドラインに「Hello World!」と表示させてみます。

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

GUI版の最小コード

VBを使えば、ただ単にVBを起動しただけでアプリケーションが出来てしまいます。とりあえず、この(ノッペラボウで何もしないけれども立派な)アプリケーションを作ります。

JavaでGUIアプリケーションを作る場合には、Swingパッケージを使います。以前はAWTパッケージも使われていましたが、Swingの方がずっとリッチなGUIを簡単に使えます。このSwingには、3つのトップレベル コンテナがあります。

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

public class HelloWorld {
    public static void main(String[] args) {
        // フレーム コンテナを作る。
        JFrame jFrame1 = new JFrame("Hello World!");
            //
            // 処理コードをここに追加する。
            //
        // ユーザーがウィンドウの[×]を押した時のイベント処理。
        jFrame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // フレームのサイズ調整
        jFrame1.pack();
        // 表示
        jFrame1.setVisible(true);
    }
}

実行してみると、ウィンドウのタイトルバーに「Hello World!」と書かれているのが判るでしょうか?GUI版最小のHelloWorldの出来上がりです。[×]ボタンを押して終了させると、コマンドラインに戻ってきます。

ラベルを貼り付ける

ここではウィンドウのクライアント領域にラベル コンポーネントを追加して、もうちょっとHelloWorldらしくしてみます。

import javax.swing.*;        

public class HelloWorld {
    public static void main(String[] args) {
        JFrame jFrame1 = new JFrame("HelloWorld");
        // ラベルコンポーネントを追加。
        final JLabel jLabel1 = new JLabel("Hello World!");
        jFrame1.getContentPane().add(jLabel1);
            //
            // 処理コードをここに追加する。
            //
        jFrame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame1.pack();
        jFrame1.setVisible(true);
    }
}

ソースの改良

上のソースを、もう少し見通し良く書き直してみます。動作結果は全く同じです。

import javax.swing.*;        

public class HelloWorld extends JFrame{

    // コンストラクタ
    public HelloWorld() {
        initComponents();
    }

    // フォーム初期化処理
    private void initComponents() {
        jLabel1 = new JLabel();

        setTitle("Hello World!");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        jLabel1.setText("Hello World!");
        getContentPane().add(jLabel1);

        pack();
    }

    // コマンドライン引数の処理
    public static void main(String[] args) {
        new HelloWorld().show();
    }

    // 変数宣言
    private JLabel jLabel1;

}

メニューを付ける

HelloWorldアプリケーションに、メニューを付けてみます。メニューを付けると、メニューイベント処理が必要になります。今までのアプリケーションでも、ウインドウの最小化・最大化・アプリケーション終了のイベントが有りますが、みんなJavaにお任せでした。

「メニュー」と呼ばれる機能は、Swingでは3種類のコンポーネントが使われます。Windowsのメモ帳アプリケーションを例にすると、下記のとおりです。
コンポーネントメモ帳では
JMenuBarメニューバー
JMenuファイル、編集、書式、ヘルプ
JMenuItem新規、開く、上書き保存、名前を付けて保存、ページ設定、印刷、メモ帳の終了、セパレータ

ここではとりあえず見た目だけ、メニューを付けてみます。

import javax.swing.*;        

public class HelloWorld extends JFrame{

    // コンストラクタ
    public HelloWorld() {
        initComponents();
    }

    // フォーム初期化処理
    private void initComponents() {
        jLabel1 = new JLabel();
        jMenuBar1 = new JMenuBar();
        jMenu1 = new JMenu();
        jMenu2 = new JMenu();
        jMenuItem1 = new JMenuItem();
        jMenuItem2 = new JMenuItem();

        setTitle("Hello World!");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        jLabel1.setText("Hello World!");
        getContentPane().add(jLabel1);

        // メニューを作る
        setJMenuBar(jMenuBar1);

        jMenu1.setText("File");
        jMenuBar1.add(jMenu1);

        jMenuItem1.setText("Exit");
        jMenu1.add(jMenuItem1);

        jMenu2.setText("Help");
        jMenuBar1.add(jMenu2);

        jMenuItem2.setText("About");
        jMenu2.add(jMenuItem2);

        pack();
    }

    // コマンドライン引数の処理
    public static void main(String[] args) {
        new HelloWorld().show();
    }

    // 変数宣言
    private JLabel jLabel1;
    private JMenuBar jMenuBar1;
    private JMenu jMenu1, jMenu2;
    private JMenuItem jMenuItem1, jMenuItem2;
}

イベントをくっ付ける

メニューからアプリケーションを終了させる処理を呼び出すコードを追加します。つまり、メニューオブジェクトに ActionListener を登録します。一般的には、ActionListener インターフェースから匿名内部クラス(anonymous inner class)を作成し、actionPerformed メソッドを定義し、その内部にイベント処理を記述します。

イベントが発生すると、イベントソースやイベントの種類等の情報を保持した ActionEvent オブジェクトが生成され、これがイベントリスナーに渡されます。

ActionListener インターフェースや ActionEvent クラスを使うには、java.awt.event.* をインポートしなければなりません。

import javax.swing.*;
import java.awt.event.*;

public class HelloWorld extends JFrame{

    // コンストラクタ
    public HelloWorld() {
        initComponents();
    }

    // フォーム初期化処理
    private void initComponents() {
        jLabel1 = new JLabel();
        jMenuBar1 = new JMenuBar();
        jMenu1 = new JMenu();
        jMenu2 = new JMenu();
        jMenuItem1 = new JMenuItem();
        jMenuItem2 = new JMenuItem();

        setTitle("Hello World!");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        jLabel1.setText("Hello World!");
        getContentPane().add(jLabel1);

        setJMenuBar(jMenuBar1);

        jMenu1.setText("File");
        jMenuBar1.add(jMenu1);

        jMenuItem1.setText("Exit");
        // メニューが作るイベント処理
        jMenuItem1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                exitForm(evt);
            }
        });
        jMenu1.add(jMenuItem1);

        jMenu2.setText("Help");
        jMenuBar1.add(jMenu2);

        jMenuItem2.setText("About");
        jMenu2.add(jMenuItem2);

        pack();
    }

    // アプリケーション終了処理
    private void exitForm(ActionEvent evt) {
        System.exit(0);
    }

    // コマンドライン引数の処理
    public static void main(String[] args) {
        new HelloWorld().show();
    }

    // 変数宣言
    private JLabel jLabel1;
    private JMenuBar jMenuBar1;
    private JMenu jMenu1, jMenu2;
    private JMenuItem jMenuItem1, jMenuItem2;
}

メッセージダイアログを表示する

Helpメニューの"About"を、メッセージダイアログで表示させてみます。

import javax.swing.*;
import java.awt.event.*;

public class HelloWorld extends JFrame{

    // コンストラクタ
    public HelloWorld() {
        initComponents();
    }

    // フォーム初期化処理
    private void initComponents() {
        jLabel1 = new JLabel();
        jMenuBar1 = new JMenuBar();
        jMenu1 = new JMenu();
        jMenu2 = new JMenu();
        jMenuItem1 = new JMenuItem();
        jMenuItem2 = new JMenuItem();

        setTitle("Hello World!");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        jLabel1.setText("Hello World!");
        getContentPane().add(jLabel1);

        setJMenuBar(jMenuBar1);

        jMenu1.setText("File");
        jMenuBar1.add(jMenu1);

        jMenuItem1.setText("Exit");
        jMenuItem1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                exitForm(evt);
            }
        });
        jMenu1.add(jMenuItem1);

        jMenu2.setText("Help");
        jMenuBar1.add(jMenu2);

        jMenuItem2.setText("About");
        jMenuItem2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                showAbout(evt);
            }
        });
        jMenu2.add(jMenuItem2);

        pack();
    }

    // アプリケーション終了処理
    private void exitForm(ActionEvent evt) {
        System.exit(0);
    }

    // ヘルプ表示
    private void showAbout(ActionEvent evt) {
        JOptionPane.showMessageDialog(this, "Hello World Application.");
    }

    // コマンドライン引数の処理
    public static void main(String[] args) {
        new HelloWorld().show();
    }

    // 変数宣言
    private JLabel jLabel1;
    private JMenuBar jMenuBar1;
    private JMenu jMenu1, jMenu2;
    private JMenuItem jMenuItem1, jMenuItem2;
}

Link

Sun : Java 2 Platform, Standard Edition (J2SE) v1.4の概要
Java開発環境のホームページ。ソフトウェア開発キット(SDK)のダウンロードが出来る。
Sun : Java 2 SDK ツールとユーティリティ
SDK各ツールの日本語ヘルプ。
Sun : Java Developer Connection
チュートリアルを始めとする、ドキュメント満載の情報サイト。要入会登録(無料)
Sun : Code Conventions for the Java Programming Language
Java言語の為のコーディング規約(英語)。必見です。
Sun : Sun ONE Studio 4
Sunが提供する統合開発環境(IDE)。Community Editionなら、無料で使える。ただし、マシンパワーがすんごい必要(T_T)