「Java・GUIアプリケーション入門」 ウィンドウを表示させボタンを配置する

Java coffee

前回の簡単なパズル・プログラムに続いて今回もJavaでプログラムを作ってみましょう。ウィンドウを画面に表示させるというプログラムです。

SPONSORED LINK

photo by Jon Lebkowsky

▼この記事の目次

  1. ウィンドウを表示させるプログラム -その1-
  2. ウィンドウを表示させるプログラム -その2-
  3. ウィンドウを表示させるプログラム -ボタン配置-
  4. この記事のまとめ

ウィンドウを表示させるプログラム -その1-

JavaでGUIアプリケーションを作るにはAWT (Abstract Window Tool kit) とSwingというパッケージが使われます。GUIとはウィンドウの中などでマウスやクリックボタンを使い直観的にコンピュータを操作する事が出来ます。ユーザーが普段使っているソフトウェアが一般的にGUIアプリケーションです。

それに対しコマンドプロンプトの中だけで入力・出力が簡潔するのがCUIです。全ての操作がキーボードによって行われます。

JavaでGUIアプリケーションを作るには以前はAWTが使われていたようですが、今回はその拡張版のSwingというパッケージ内にあるクラスを使用します。
まずはJFrameクラスを使用します。JFrameはjava.awt.Frame直接の拡張バージョンとなるようです。

このクラスを利用するとこのようにウィンドウを表示させる事が出来ます。

wind

▼「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);

一応表示はされますが最小サイズの表示になってしまいます。

wind2

「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」という文字を入れたボタンが表示されました。

wind3
コードはこうなります。

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()」は一番最後に持ってこないとボタンが表示されなかったのでこの位置にしました。

この記事のまとめ

まだまだソフトウェアの形としては程遠いですが、ウィンドウを表示させて一応ボタンは配置したので今回はこれで良しとしました。

またこれにレイアウトを追加したり、ボタンをクリックしたらイベントを発生させたりと少しずつ複雑な事もやっていきたいので今後はその辺の事をぼちぼち紹介していこうと思います。

関連記事




この記事が気に入ったら
いいね!しよう

最新情報をお届けします

Twitterでめちゃログをフォローしよう!