そのままAWTで開発を続けることもできますが、Swingのほうが便利なので書き換えることにします。
SwingはAWTより軽量で使いやすく、多くのコンポーネントが用意されています。手順は少し複雑ですが、便利な部品が用意されているので、プログラムが楽になります。
「だったら最初からSwingで作ればよかったのでは?」と思うかもしれません。しかしあくまでGUIの基本となるのはAWTです。Swingを使う場合でも必ず一部はAWTが必要になるからです。
今回はAWTからSwingに書き換えるためのもっとも基本的なことを解説します。
【1】sample200 フォルダをフォルダごとコピーして、sample209 フォルダを作ります。
【2】今回は以下のようなファイル構成になりますので、コピーした余計なものは削除してください。
【3】PrefTest.java を以下のように変更します。
*「\」はWindowsではエンマークのことです。
保存先 C:\java\sample209
ファイル名 PrefTest.java
import java.awt.*;
import javax.swing.*;
class PrefFrame extends JFrame {
public PrefFrame(String title) {
//フレームのタイトル
setTitle(title);
//ウィンドウを閉じる時
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
public class PrefTest {
public static void main(String args[]) {
PrefFrame frm = new PrefFrame("都道府県マスター");
frm.setLocation(300, 200);
frm.setSize(250, 350);
frm.getContentPane().setBackground(Color.LIGHT_GRAY);
frm.setVisible(true);
}
}
【4】コマンドプロンプトを起動して、カレントディレクトリを sample209 に切り替えます。
【5】javac PrefTest.java と入力し、コンパイルします。
【6】java PrefTest と入力し、プログラムを実行します。
【7】Swing のウィンドウが表示されました。
【8】ウィンドウを閉じてみましょう。
【9】コマンドプロンプトは次の命令を入力できる状態になりました。
【解説】
(1)Swingに最低限必要なインポートは「javax.swing.*」パッケージだけです。しかしColorクラスなど「java.awt.*」パッケージに含まれるクラスを使うので、以下の2つが必要です。
import java.awt.*;
import javax.swing.*;
*swingの場合、「javax」でエックスが付いていることに注意してください。
*今回WindowAdapterクラスは使いませんので、「java.awt.event.*」は不要です。
(2)クラスの宣言を比較してみます。Swingは JFrameクラスを拡張して作ります。
・Swing
class PrefFrame extends JFrame {
・AWT
class PrefFrame extends Frame {
(3)ウィンドウを閉じる時の処理を比較してみます。Swingではだいぶ簡単になっていることがわかります。
・Swing
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
・AWT
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
(4)PrefTestクラスからの背景色設定を比較してみます。
・Swing
frm.getContentPane().setBackground(Color.LIGHT_GRAY);
・AWT
frm.setBackground(Color.LIGHT_GRAY);
AWTではフレームの上にコンポーネントを配置していました。しかしSwingの場合はフレームの上にコンテンツペインがあり、メニューバー以外のコンポーネントはコンテンツペインに配置することになります。今回は背景色もコンテンツペインに設定したわけです。
Swingの場合はコンテンツペインを取得して、それに対してコンポーネントを配置する手順は増えますが、慣れてくるとそれほど難しくありません。
またAWTで使えたコンポーネントはほとんどSwingに継承されていますので、頭文字に「J」を付けるとSwingのコンポーネントになります。
【ワンポイント】
*重要
setDefaultCloseOperation()はシンプルで便利ですが、ウィンドウを閉じる時のイベントで他の関数を呼び出したりすることができません。
そこで閉じるときは、SwingでもAWTと同じ方法を使うことにします。その場合はWindowAdapterクラスを使いますので、「java.awt.event.*」もインポートする必要があります。