今回は入門編として、Javaで簡単なプログラムを作っていくという企画をやりたいと思います。
photo by Jon Lebkowsky
ウィンドウを表示させるプログラム -その1-
JavaでGUIアプリケーションを作るにはAWT (Abstract Window Tool kit) とSwingというパッケージを使います。
GUIとは、ウィンドウの中でマウスやクリックボタンを使い直観的にコンピュータ操作をすることができるというものです。
ユーザーが普段使っているソフトウェアが一般的にGUIアプリケーションです。
それに対しコマンドプロンプトの中だけで入力・出力を実行するのがCUIです。全ての操作がコマンドの記述によって行われます。
JavaでGUIアプリケーションを作るには以前はAWTが使われていたようですが、今回はその拡張版のSwingのパッケージ内にあるクラスを使用します。
まずはJFrameクラスを使用します。JFrameはjava.awt.Frame直接の拡張バージョンになります。
このクラスを利用すると、このようにウィンドウを表示することができます。

▼「Wind.java」 ウィンドウを表示させる記述
import javax.swing.JFrame; //JFrameクラスの呼び出し class Wind{ public static void main(String args[]){ JFrame frame = new JFrame("ウィンドウを表示"); //オブジェクト生成 frame.setSize(850,700); //ウィンドウサイズ(横,縦) frame.setVisible(true); //trueでウィンドウを表示させる } }
一行目の「import java.javax.swing.JFrame」のimport文でJFrameクラスを呼び出しています。
なぜjavaパッケージ名ではなく、javaxというパッケージ名なのかというとjavaパッケージの拡張版でjavaxということで覚えておけば間違いないでしょう。
もちろん、以下のような記述でも同じ意味になります。
javax.swing.JFrame frame = new Javax.swing.JFrame()
「setSize」ウィンドウのサイズ
「setSize」でウィンドウサイズを変更することが出来ます。(横,縦)の並びです。
「Wind.java」では数値をいれていますが、試しにこれを0としてみます。
frame.setSize(0,0);
すると、すると、一応表示はされますが最小サイズの表示になってしまうわけです。

「setVisible」ウィンドウの表示・非表示切り替え
「setVisible」はJFrameクラスのメソッドとなります。「true (真)」でウィンドウが表示され、「false (偽)」でウィンドウが非表示となります。
ウィンドウを表示させるプログラム -その2-
上のコードだけでもウィンドウを表示させることは出来ますが、ウィンドウを閉じた時の動作を指定するためのコードをここでは紹介したいと思います。
「メソッド」ウィンドウを閉じた時の動作
JFrameクラスには「setDefaultCloseOperation()」というメソッドもあります。
こちらはJFrameのメソッド (英… method) となります。メソッドは日本語に訳すと方法、道筋というような意味なりまして、Javaのクラスで使われるメソッドは操作方法という認識で合っていると思います。例えばこれがテレビというオブジェクトであればテレビに直接ついているチャンネル、音量変更ボタンみたいなものです。
メソッド「setDefaultCloseOperation()」にはこのように4つの操作方法が用意されています。ウィンドウを閉じた時にどのような動作をするのか指定するものです。
JFrame.DO_NOTHING_ON_CLOSE //1. 何も行わない JFrame.HIDE_ON_CLOSE //2. ウィンドウを隠す (デフォルト) JFrame.DISOSE_ON_CLOSE //3. ウィンドウを終了する JFrame.EXIT_ON_CLOSE //4. アプリケーションを終了する
全ての動作を確認してみました
「setDefaultCloseOperation()」を記述していない場合は2番「JFrame.HIDE_ON_CLOSE」の動作が適用されます。それでも問題はないですが2番の動作のままだと実際にウィンドウを閉じるとコマンドプロンプトが止まってしまいそれ以降の操作が出来なくなります。
1番だと「何も行わない」のでウィンドウを閉じる事が出来なくなってしまいます。とすると、3番か4番かという事になりますがこの2つの違いは一体?
ウィンドウが一つだけの場合はおそらくどちらを選択しても同じ動作になります。ウィンドウを複数開いていた場合に3番を選択していると、ウィンドウ一つ閉じても一つウィンドウが閉じられたというだけでアプリは終了しません。それに対し複数ウィンドウで4番を選択した場合は1つでもウィンドウが閉じられるとアプリが終了するという動作になります。
よって何を選択するかは作るプログラムの種類によって違ってくると思います。
今回の「Wind.java」プログラムでは「JFrame.EXIT_ON_CLOSE」を追加する事にします。ウィンドウを閉じたらアプリ終了という動作です。
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // このコードを追加する
画像では違いがわからない動作になるのでこのまま次へ行ってみましょう。
「メソッド」ウィンドウを中央に表示させる
JFrameクラスを使う事によって表示されるウィンドウはデフォルトのままだと左上に寄ってくっついているような感じで表示されます。ちょっとこれだとユーザーが使う事を想定した場合使いずらいので中央に表示されるように変更を加えます。
「setLocationRelativeTo()」メソッドを使います。()内の引数にはnullを指定するとウィンドウが中央に表示されます。
setLocationRelativeTo(null) //ウィンドウを中央に表示する
ウィンドウを表示させるプログラム -ボタン配置-
その③ではせっかくウィンドウを表示させているので、ウィンドウの中にボタンを配置してみます。
▼デフォルトのままだと思ったよりもシンプルなレイアウトですが「OK」という文字を入れたボタンが表示されました。

コードはこうなります。
import javax.swing.*; //変更 class Wind{ public static void main(String args[]){ JFrame frame = new JFrame("ウィンドウを表示"); frame.setSize(420,280); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); JButton button = new JButton("OK"); //追加 frame.add(button); //追加 frame.setVisible(true); //変更 } }
JBUttonクラスの追加
かなりシンプルなコードなのでわかりやすいと思いますが、ボタンを配置するためにJButtonクラスを追加しました。まず上のimport文から見てみましょう。
▼JButtonクラスは「javax.swing.JButton」にあるので、一つのimport文でJFrameクラス・JButtonクラスを両方使えるようにこのようにしました。
import javax.swing.*;
同じjavax.swingパッケージ内でもどちらか片方のクラスを指定しただけではエラーになってしまいました。なのでこのような呼び出し方でももちろん使えますが結構な手間です。
import javax.swing.JFrame; import javax.swing.JButton;
そして「//追加」の部分でJButtonクラスを使いボタンを作成しウィンドウ内に表示させています。「frame.setVisible()」は一番最後に持ってこないとボタンが表示されなかったのでこの位置にしました。
まとめ
まだまだソフトウェアの形としては程遠いですが、ウィンドウを表示させて一応ボタンは配置したので今回はこれで良しとしました。
またこれにレイアウトを追加したり、ボタンをクリックしたらイベントを発生させたりと少しずつ複雑な事もやっていきたいので今後はその辺の事をぼちぼち紹介していこうと思います。