はじめに
プログラミングというのは、ある程度の技量がつくまでは、計算したりテキストの処理をしたりといった地味~な作業ばかりするもの、というイメージがあります。が、コマンドラインから数字や文字が出てくるようなプログラムばかり作って、楽しいですか?(筆者は、全然楽しくない!)
やっぱり、プログラミングは「作って楽しい」ものでなければやってられません。クロウトならば、どんなものであれ楽しみを見出せるでしょうが、ビギナーのうちは、やっぱり「目に見える」形で動くものでないと楽しさを実感できないでしょう。そう、やっぱりプログラムと言えば「ウインドウ」がないと始まらないのです。そこで、Javaの最も基礎的なところを覚えたところで、「ウインドウ」を使ったプログラムの作り方へと進むことにしましょう。
これまでの記事
対象読者
- Javaに興味はある、けれどプログラミング経験がない、という人。
- Javaに興味はある、けれど何から手をつければいいかわからない、という人。
- Javaに興味はない、でも何でもいいからプログラミングをしたい、という人。
AWTとSwing
Javaには、標準でGUI(Graphic User Interface、ウインドウやメニューなど、ビジュアルに表示してユーザーが操作できるようなインターフェース)を構築するためのクラス群が用意されています。しかも2種類あり、1つは「AWT(Abstract Window Toolkit)」、もう1つは「Swing」というものになります。それぞれの特徴を簡単に整理しましょう。
AWT
Javaのリリース当初から搭載されている、最も基本となるGUIライブラリです。非常にシンプルなライブラリで、簡単にGUIが構築できる反面、ちょっと複雑なことをさせようとすると「それはできません」となってしまうきらいがあります。
AWTは、その表示に関する部分をネイティブなコード(Javaのコードではなく、OSの環境で実行されるコード)に依存しています。例えばWindowsであれば、WindowsのOSにあるウインドウシステムのAPIを呼び出してGUIの表示などを行っている、ということになります。直接APIを呼び出しているため動作は非常にきびきびとしているのですが、反面、細かなところはJavaからまったく手を触れられないようなものとなってしまっています。「こっから先はOSがやってくれるからJavaはダメ!」という仕組みになっているというわけです。
Swing
Java 1.2より新たにサポートされるようになったGUIライブラリです。AWTをベースにして、大幅に機能強化されたSwingは、AWTと比べると圧倒的な機能を誇ります。あまりに強大すぎて、ビギナーは何がなんだかわからない感じがするかもしれません。AWTと違い、Java側で描画を行うようにして極力ネイティブなコードを排除したため、もっさりとした動作になってしまいますが、非常に柔軟な扱いが可能となりました。
AWTにはなかったコンポーネント(GUIの部品類)もいろいろと追加されていますし、見た目もずいぶんと洗練されています。また、当初かなり重たかった動作もバージョンアップとマシン性能の向上により、今ではほとんど普通のアプリケーションと変わらないレベルにまで向上しています。
要するに「シンプルだが貧弱なAWT」と「複雑怪奇だがなんでもできるSwing」と考えておけばよいでしょう。「で、結局どちらを覚えればいいんだ?」と思った方、以前ならば「とりあえずAWTを覚えて、Swingはいずれそのうちに」と答えたのですが、最近はやや様子が違ってきています。
なぜならJavaのバージョンアップにより、Swingでも、ごく基本的な使い方ならばかなり簡単に利用できるようになってきているのです。また、最近になってRIA(Rich Internet Application、よりリッチなGUIをもったインターネットアプリケーションのこと)が注目されつつあるに伴い、Swingが再評価されるようになってきつつあります。こうしたことを考えるなら、ビギナーでも「Swing」から始めた方が良いように思えます。
パッケージについて
では、さっそくSwingを使ってウインドウを表示するプログラムを作ってみましょう。Swingでは、ウインドウやメニューやボタンなど、GUIのさまざまな部品類(コンポーネントと呼びます)がすべてクラスとして用意されています。このクラスのインスタンスをnewで作成し、その中のメソッドを呼び出すことで、コンポーネントを利用できるようになっているのです。
ウインドウのコンポーネントは、「javax.swing.JFrame」というクラスとして用意されています。「なんだかずいぶんと長ったらしいクラス名だな」と思うかもしれません。実は、クラス名は「JFrame」という部分だけです。その前の「javax.swing」というのは「パッケージ」というものなのです。
Javaではクラスに名前をつけて利用します。が、これはクラスの数が少なければいいのですが、数百、数千になると「すべて違う名前」をつけるだけでも大変になってきます。そこで、ちょうどファイル類をフォルダで分類整理するのと同じように、「パッケージ」というものを使って階層的にクラスを整理できるようにしたのです。「ファイルをフォルダで整理するのと同じようなものだ」と考えてください。
パッケージは、ドットでパッケージ名を区切って記述します。例えば、「javax.swing.JFrame」というクラスは「javax」パッケージの中の「swing」パッケージ内にある「JFrame」というクラスを示すものだった、というわけです。Swingのコンポーネント関係のクラスは、大体このjavax.swingというパッケージにまとめられています。
もちろん、パッケージは自分でクラスを作るときにも指定できます。ソースコードの最初に、次のように記述をします。
package パッケージの指定;
例えば、「codezine.java」というパッケージにクラスを作りたければ、ソースコードの最初に、「package codezine.java;」と書いておけばいいのです。またソースコードファイルは、「codezine」フォルダ内の「java」フォルダの中に作成をします。ソースコードを配置する場所と、packageで指定したパッケージが同じとなるように注意をしてください。