第7日1・2時限目 SwingSetを動かしてみる

jdk1.5.0_03を使っている。このキットに同梱されているSwingsetはデフォルトインストールでは、C:\Program Files\Java\jdk1.5.0_03\demo\jfc\SwingSet2\SwingSet2.jarに置かれる。ダブルクリックにて起動を確認。ツールバーの動作確認、GUIの切り替わりを滞りなく終えた。

下記、ソースにより、JFrameに"JFrameクラスのコンストラクタを呼び出す"というタイトルを持たせたウィンドウを立ち上がらせることができた。ウィンドウの最小化・最大化・終了ボタンも機能し、ツールバーのダブルクリックがウィンドウの最大化を起こすことも確認した。ウィンドウが開いている間は、コマンドラインは「待ちうけ」状態を維持していた。これらは、JFrameに内臓された機能らしい。×印である「終了」ボタンの場合は、このボタンだけだとウィンドウは閉じるが、このウィンドウを呼び出している命令自体を終了させていないので、それについては、下記ソースにも記述したように、JFrameを閉じる操作に併せて、ウィンドウ呼び出し命令自体を終了させる必要がある。

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

public class D7L2{



public static void main(String[] args){
JFrame myFrame = new JFrame(
"JFrameクラスのコンストラクタを呼び出す");
//以下のaddWindowListener(ウィンドウに耳を傾ける)は、JFrameに内臓された「終了(ウィンドウを閉じる)」という操作にあたって、OS側でも>java xxxx の作業を終えてプロンプトに戻るためのコマンドに相当する。


myFrame.addWindowListener(new WindowAdapter(){


public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
myFrame.setSize(300, 200);
myFrame.setVisible(true);
}
}

ちなみに2つのJFrameを開くこともできる。
2つのJFrameの両方にSystem.exit(0)を組み込んでおくと、どちらのJFrameを閉じてもSystem.exit(0)が実現される

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

public class D7L3{



public static void main(String[] args){
//フレーム
JFrame myFrame = new JFrame(
"JFrameクラスのコンストラクタを呼び出す");
//フレームを閉じる


myFrame.addWindowListener(new WindowAdapter(){


public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//フレーム2
JFrame myFrame2 = new JFrame(
"JFrame2クラスのコンストラクタを呼び出す");
//フレームを閉じる


myFrame2.addWindowListener(new WindowAdapter(){


public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

//フレームにボタン
JButton myButton = new JButton("フレーム1のボタン1");
JButton myButton2 = new JButton("フレーム2のボタン2");

myFrame.getContentPane().add(myButton);
myFrame2.getContentPane().add(myButton2);
//フレームのサイズと表示指定
myFrame.setSize(600, 400);
myFrame.setVisible(true);
myFrame2.setSize(300, 200);
myFrame2.setVisible(true);
}
}

最後に。
ラベルにトレードマークgif画像を入れてみた。

	//ラベル2に月見かめを入れる
	Icon myIcon = new ImageIcon("kame_tukimi.gif");
	JLabel myLabel2 = new JLabel(myIcon);
	myFrame.getContentPane().add(myLabel2);