[戻る]
60---簡易カード型データベース 自作インターフェイスを使った応用
//applet071で作成した GUIOperatorインターフェイスと、Aggregationクラスを利用して作る。
/* */
import java.applet.*;
import java.awt.*; //Graphics使用
import java.awt.event.*;//
public class applet60 extends Applet implements GUIOperator{
TextField txtName; //名前入力用
TextField txtAddr; //アドレス入力用
Label lbl_idx;
Aggregation 集合体 = new Aggregation(); //GUIOperatorを使う集合体
class MemoMember0 {//個人を記憶する
String name; //名前
String addr; //アドレス
}
public void set_idx(int i){ //表示中データをi番目へ記憶する命令
MemoMember0 obj = new MemoMember0();
obj.name = txtName.getText();
obj.addr = txtAddr.getText();
集合体.v.set(i,obj);//iの位置にある要素を、objで置き換え!
//本来なら、Aggregationにsetメソッドを作る。
}
public void get_idx(int i){ //i番目の記憶内容を表示する命令
MemoMember0 obj = (MemoMember0) 集合体.v.get(i);
//本来なら、Aggregationにgetメソッドを作る。
if(obj != null){
txtName.setText(obj.name);
txtAddr.setText(obj.addr);
} else {
txtName.setText("xxxx");
}
lbl_idx.setText("idx:"+ i);
}
public void init(){//アプレットがロードされた時に呼ばれる。
Button btnBack,btnNext;
setBackground(new Color(200,200,200));
add(btnBack = new Button("←戻る"));
add( new Label("名前"));
add(txtName = new TextField("xxxx",20));
add( lbl_idx = new Label("idx: 0"));
add(btnNext = new Button("次へ→"));
add( new Label("アドレス"));
add(txtAddr = new TextField("",40));
btnNext.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(txtName.getText().equals("xxxx") == false ){
集合体.goNext();
}
}
});
btnBack.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(集合体.idx != 0){
集合体.goBack();
}
}
});
集合体.addOperator(this);// addActionListenerに対応する
}
}
[戻る]
61 applet60をフレーム版に変更し、データをファイルに記憶できるよう変更
import java.awt.*; //ボタン使用
import java.awt.event.*;//WindowListenerなどの使用のため
import java.io.*; //ファイル操作クラス用
public class frame0712 extends Frame implements GUIOperator{
TextField txtName; //名前入力用
Label lbl_idx;
Aggregation 集合体 = new Aggregation(); //GUIOperatorを使う集合体
class MemoMember0 {//個人を記憶する
String name; //名前
}
public frame0712() { //コンストラクタ (アプレットでないので、initメソッドは不要)
setLayout(new FlowLayout()); //レイヤー変更
Button btnBack,btnNext;
setBackground(new Color(200,200,200));
add(btnBack = new Button("←戻る"));
add(txtName = new TextField("xxxx",20));
add( lbl_idx = new Label("idx: 0"));
add(btnNext = new Button("次へ→"));
setSize(430,70);
setTitle("カードデータベースの骨組み2");
btnNext.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
集合体.goNext();
}
});
btnBack.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
集合体.goBack();
}
});
集合体.addOperator(this);// addActionListenerに対応する
addWindowListener( new WindowListener() { //リスナー登録:無名(匿名)クラスを使う
public void windowOpened(WindowEvent e){
try {
//ファイル入力用バッファリングストリーム生成
BufferedReader buffread =
new BufferedReader(new InputStreamReader(new FileInputStream("frame071.txt")));
System.out.println("frame071.txtから読み取り開始");
集合体.v.clear();//すべての要素を Vector から削除
while(buffread.ready()){
String s = buffread.readLine();
System.out.println(s + "をファイルから読み取り");
MemoMember0 member = new MemoMember0();
member.name = s;
集合体.v.add(member); //集合に追加
}
buffread.close();
System.out.println("読み取り終了");
frame0712.this.get_idx(0); //最初の表示
}
catch(Exception ew){
System.out.println(ew.toString());//エラー表示
}
}
public void windowClosing(WindowEvent e){
frame0712.this.dispose(); //ウィンドウ破棄(閉じて無くなる)
}
public void windowClosed(WindowEvent e){
try{
//ファイル出力用バッファリングストリーム生成
BufferedWriter buffwrite =
new BufferedWriter(new OutputStreamWriter(new FileOutputStream("frame071.txt")));
System.out.println("frame071.txtへの書き込み開始");
for(int i = 0;i < 集合体.v.size(); i++){
MemoMember0 member = (MemoMember0) 集合体.v.get(i);
if(member != null){
System.out.println(member.name + "を書き込み");
buffwrite.write( member.name ); //ファイルへ書き込み
buffwrite.newLine(); //ファイルへ改行を書き込む
}
}
buffwrite.close();
}
catch(Exception ew){
System.out.println(e.toString());//エラー表示
}
}
public void windowIconified(WindowEvent e){ }
public void windowDeiconified(WindowEvent e){ }
public void windowActivated(WindowEvent e){ }
public void windowDeactivated(WindowEvent e){ }
} );
show(); //これをコンストラクタの最終行に移動
}
public static void main(String argv[]){
frame0712 p = new frame0712();//インスタンス生成
}
public void set_idx(int i){ //表示中データをi番目へ記憶する命令
MemoMember0 obj = new MemoMember0();
obj.name = txtName.getText();
集合体.v.set(i,obj);//iの位置にある要素を、objで置き換え!
}
public void get_idx(int i){ //i番目の記憶内容を表示する命令
MemoMember0 obj = (MemoMember0) 集合体.v.get(i);
if(obj != null){
txtName.setText(obj.name);
} else {
txtName.setText("xxxx");
}
lbl_idx.setText("idx:"+ i);
}
}
[戻る]
62 再利用可能な、よく使う簡単なメッセージボックス(モーダルダイアログ)を定義する
import java.awt.*;
import java.awt.event.*;//WindowListenerなどの使用のため
public class MessageBox extends Dialog implements ActionListener, WindowListener{
public static final int MB_OK = 1; //スタイル
public static final int IDOK = 10; //リターンコード
public static final int IDCANCEL = 12;
public static final int IDNO = 13;
Button btnOk;
int rtnCode = IDCANCEL; //リターンコード
String rtnString = ""; //リターン文字列
public MessageBox(Frame owner,String title){
super(owner,title,true);//モーダルダイアログ指定
}
public static int exec(Frame owner, String title, String msg ,int width,int height, int type){
MessageBox p = new MessageBox(owner,title);
if(type == MB_OK){
p.setLayout(new FlowLayout()); //レイヤー変更
p.add(new Label(msg));//メッセージ追加
p.btnOk = new Button("OK");
p.add(p.btnOk); //ボタン追加
p.btnOk.addActionListener( p );
}
Point pt = owner.getLocationOnScreen();
p.setLocation(pt.x,pt.y);
p.setSize(width,height);
p.show();
return p.rtnCode;
}
public static int exec(Frame owner, String title, String msg){
return exec(owner, title, msg ,240,80,MB_OK);
}
public void actionPerformed(ActionEvent e){
if(e.getSource() ==btnOk){
rtnCode = IDOK;
dispose();//上記showメソッドが終了することになる。
}
}
public void windowOpened(WindowEvent e){ }
public void windowClosing(WindowEvent e){ }
public void windowClosed(WindowEvent e){
dispose();//上記showメソッドが終了することになる。
}
public void windowIconified(WindowEvent e){ }
public void windowDeiconified(WindowEvent e){ }
public void windowActivated(WindowEvent e){ }
public void windowDeactivated(WindowEvent e){ }
}
[戻る]
63---再利用可能な、よく使う簡単な入力用ボックスを定義する
import java.awt.*;
import java.awt.event.*;//WindowListenerなどの使用のため
public class InputBox extends Dialog implements ActionListener, WindowListener{
public static final int IDOK = 10; //リターンコード
public static final int IDCANCEL = 12;
public static final int IDNO = 13;
Button btnOk;
TextField txt;
int rtnCode = IDCANCEL; //リターンコード
String rtnString = ""; //リターン文字列
public InputBox(Frame owner,String title){
super(owner,title,true);//モーダルダイアログ指定
}
public static int exec(Frame owner, String title, String msg , StringBuffer data,int width,int height){
InputBox p = new InputBox(owner,title);
p.add(new Label(msg),BorderLayout.NORTH);//メッセージ追加
p.txt = new TextField(data.toString());
p.add(p.txt,BorderLayout.CENTER);
p.btnOk = new Button("OK");
p.add(p.btnOk,BorderLayout.SOUTH); //ボタン追加
p.btnOk.addActionListener( p );
p.addWindowListener( p );
Point pt = owner.getLocationOnScreen();//オーナーフレームと同じ位置に表示
p.setLocation(pt.x,pt.y);
p.setSize(width,height);
p.show(); //モーダル指定Dialogの場合、disposeされるまで次に進まない。
//以降は、dispose後(閉じられるか、OKボタンを押してから)に実行する。
if(p.rtnCode == IDOK){
data.replace(0,data.length(),p.rtnString);//引数のdata文字列(StringBuffer型)全体をsに置き換え
}
return p.rtnCode;
}
public static int exec(Frame owner, String title, String msg,StringBuffer data){
return exec(owner, title, msg ,data ,240,100);
}
public void actionPerformed(ActionEvent e){
if(e.getSource() ==btnOk){
rtnCode = IDOK;
rtnString = txt.getText();
dispose();//上記showメソッドが終了することになる。
}
}
public void windowOpened(WindowEvent e){ }
public void windowClosing(WindowEvent e){
dispose();//上記showメソッドが終了することになる。
}
public void windowClosed(WindowEvent e){ }
public void windowIconified(WindowEvent e){ }
public void windowDeiconified(WindowEvent e){ }
public void windowActivated(WindowEvent e){ }
public void windowDeactivated(WindowEvent e){ }
}
[戻る]
64---簡易型カードデータベース完成版
//Aggregation2で管理されることを前提にした専用クラスで、これ以外のフィールドは継承して使う。
public class Member implements Cloneable{ //名前を持つメンバー
public String name; //名前
protected Object clone(){
Member newobj = new Member();
newobj.name = new String(name);
return newobj;
}
}
──────────────────────────
// ComareMemberName.java これは、Memberのnameフィールド(Stringクラス)を比較する専用クラス
import java.util.*;
public class ComareMemberName implements Comparator {
public int compare(Object a, Object b){
Member ma = (Member) a;
Member mb = (Member) b;
if(mb == null) return -1;
else if(ma == null) return 1;
else return ma.name.compareTo(mb.name);//文字列同士の比較
}
}
──────────────────────────
// Aggregationに対して、挿入、削除、検索、並び替えを追加したクラス
// Comparatorインターフェイスを利用し、Memberとその継承クラスを管理することを前提にした専用クラス
import java.util.*;
public class Aggregation2 extends Aggregation {
public void insert(){//挿入
Member srcObj = (Member) v.get(idx);
Member newObj = (Member) srcObj.clone();//複製
v.add(idx,newObj);
}
public void remove(){//削除
if(v.size() == 1){ //1要素残しておきたいので・・
v.set(0,null);
} else {
v.remove(idx);//削除
if(idx > 0){
idx--;
}
}
operator.get_idx(idx);
}
public boolean serachName(String s){
ComareMemberName cmp = new ComareMemberName();
Member serach = new Member();
serach.name = s;
int i;
for(i = idx; i < v.size(); i++){
if(cmp.compare(serach,v.get(i)) == 0) break;
}
if(i == v.size()){
return false; //見つからない
} else {
idx = i;
operator.get_idx(idx);
return true;//見つかった。
}
}
public void sortName(){
ComareMemberName cmp = new ComareMemberName();
Collections.sort(v,cmp);//Comparatorをインプリメントしてあれば、これでOK
operator.get_idx(idx);
}
}
──────────────────────────
/* jarファイル作成コマンド
●%JAVA_HOME%\bin\jar cmvf frame0713.txt frame0713.jar frame0713*.class Aggregation.class Aggregation2.class ComareMemberName.class Member.class GUIOperator.class MessageBox.class InputBox.class
●frame0713.txtの内容
Main-Class: frame0713
Class-Path: .
*/
/* frame0713.jarダウンロード
*/
import java.awt.*; //Graphics使用
import java.awt.event.*;//WindowListenerなどの使用のため
import java.io.*; //ファイル操作クラス用
import java.util.*;
public class frame0713 extends Frame implements GUIOperator{
TextField txtName; //名前入力用
TextField txtAddress; //アドレス入力用
Label lbl_idx;
Aggregation2 集合体 = new Aggregation2(); //GUIOperatorを使う集合体
MenuBar mnuBar; //メニューバー管理用
Menu menu; //メニュー管理用
MenuItem itemInseart, itemRemove, itemSearch, itemSort; //メニュー項目
class MemoMember0 extends Member {//個人を記憶する
//memoMemberのフィールドが多く存在する外部のpublicクラスにした方がよい.
//また、フィールドが追加される場合は、cloneをオーバーライドする
public String address ="";
protected Object clone(){
MemoMember0 newobj = new MemoMember0();
newobj.name = new String(name);
newobj.address = new String(address);
return newobj;
}
}
public frame0713() { //コンストラクタ (アプレットでないので、initメ;ソッドは不要)
Panel panel = new Panel();
add(panel, BorderLayout.NORTH);
Button btnBack,btnNext;
setBackground(new Color(200,200,200));
panel.add(btnBack = new Button("←戻る"));
panel.add(txtName = new TextField("xxxx",20));
panel.add( lbl_idx = new Label("idx: 0"));
panel.add(btnNext = new Button("次へ→"));
add(txtAddress = new TextField(),BorderLayout.CENTER);
setSize(430,100);
setTitle("カードデータベースの骨組み2");
setMenuBar(mnuBar = new MenuBar()); //メニューバー追加
mnuBar.add(menu = new Menu("操作"));//トップメニュー追加
menu.add(itemInseart = new MenuItem("新規要素挿入"));//項目追加
menu.add(itemRemove = new MenuItem("現在要素削除"));//項目追加
menu.add(itemSearch = new MenuItem("名前検索"));//項目追加
menu.add(itemSort = new MenuItem("並び替え"));//項目追加
btnNext.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
集合体.goNext();
}
});
btnBack.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
集合体.goBack();
}
});
集合体.addOperator(this);// addActionListenerに対応する
addWindowListener( new WindowListener() { //リスナー登録:無名(匿名)クラスを使う
public void windowOpened(WindowEvent e){
try {
//ファイル入力用バッファリングストリーム生成
BufferedReader buffread =
new BufferedReader(new InputStreamReader(new FileInputStream("frame071.txt")));
System.out.println("frame071.txtから読み取り開始");
集合体.v.clear();//すべての要素を Vector から削除
while(buffread.ready()){
String s = buffread.readLine();
System.out.println(s + "をファイルから読み取り");
MemoMember0 member = new MemoMember0();
member.name = s;
s = buffread.readLine();
System.out.println(s + "をファイルから読み取り");
member.address = s;
集合体.v.add(member); //集合に追加
}
buffread.close();
System.out.println("読み取り終了");
if(集合体.v.size() == 0) 集合体.v.setSize(1); //---------------------6/5修正----------------------------------------
frame0713.this.get_idx(0); //最初の表示
}
catch(Exception ew){
System.out.println(ew.toString());//エラー表示
}
}
public void windowClosing(WindowEvent e){
frame0713.this.dispose(); //ウィンドウ破棄(閉じて無くなる)
}
public void windowClosed(WindowEvent e){
try{
if(txtName.getText().compareTo("xxxx") != 0) set_idx(集合体.idx); //---------------6/5修正--------------
//ファイル出力用バッファリングストリーム生成
BufferedWriter buffwrite =
new BufferedWriter(new OutputStreamWriter(new FileOutputStream("frame071.txt")));
System.out.println("frame071.txtへの書き込み開始");
for(int i = 0;i < 集合体.v.size(); i++){
MemoMember0 member = (MemoMember0) 集合体.v.get(i);
if(member != null){
System.out.println(member.name + "を書き込み");
buffwrite.write( member.name ); //ファイルへ書き込み
buffwrite.newLine(); //ファイルへ改行を書き込む
System.out.println(member.address + "を書き込み");
buffwrite.write( member.address ); //ファイルへ書き込み
buffwrite.newLine(); //ファイルへ改行を書き込む
}
}
buffwrite.close();
}
catch(Exception ew){
System.out.println(e.toString());//エラー表示
}
}
public void windowIconified(WindowEvent e){ }
public void windowDeiconified(WindowEvent e){ }
public void windowActivated(WindowEvent e){ }
public void windowDeactivated(WindowEvent e){ }
} );
itemInseart.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){//新規要素挿入
集合体.insert();
}
});
itemRemove.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){//現在要素削除
集合体.remove();
}
});
itemSearch.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){//名前検索
StringBuffer data = new StringBuffer("検索名");
int code = InputBox.exec(frame0713.this,"入力","検索文字列入力", data);
if(集合体.serachName(data.toString()) == false){
MessageBox.exec(frame0713.this,"検索文字結果", "見つかりませんでした");
}
}
});
itemSort.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){//並び替え
集合体.sortName();
}
});
show(); //これをコンストラクタの最終行に移動
}
public static void main(String argv[]){
new frame0713();//インスタンス生成
}
public void set_idx(int i){ //表示中データをi番目へ記憶する命令
MemoMember0 obj = new MemoMember0();
obj.name = txtName.getText();
obj.address = txtAddress.getText();
集合体.v.set(i,obj);//iの位置にある要素を、objで置き換え!
}
public void get_idx(int i){ //i番目の記憶内容を表示する命令
MemoMember0 obj = (MemoMember0) 集合体.v.get(i);
if(obj != null){
txtName.setText(obj.name);
txtAddress.setText(obj.address);
} else {
txtName.setText("xxxx");
txtAddress.setText("");
}
lbl_idx.setText("idx:"+ i);
}
}
[戻る]
65---簡単なスロットマシンっぽいもの(カウントダウンするパネルを別途に作って3つ配置する)
//インターフェイスの応用プログラム
public interface TimeObserver {//監視メソッドを予約
public void update();//★★★
}
───────────────────────
//カウントダウンするパネル
import java.applet.*;
import java.awt.*;//各種部品の使用
import java.awt.event.*;//ActionEvent用
import java.lang.*; //Tread用
public class CountDownPanel extends Panel implements ActionListener , Runnable {
TextField txtCount; //表示用
int counter = 9; //カウンター9から0までダウンカウント
Button btnStop; //ストップボタン
Thread thread ; //スレッド管理用
public boolean startFlag =false;
TimeObserver observer; //監視者★★★
public CountDownPanel(TimeObserver obs){//コンストラクタ
observer = obs; //監視役登録★★★
Button btnStart;
setLayout(new BorderLayout());
add(txtCount = new TextField("9",3),BorderLayout.NORTH);
add(btnStop = new Button("STOP"));
btnStop.addActionListener(this);//ストップボタン操作登録
setSize(70,70);
}
public void setDownStart(int data){ //dataをセットしてカウントダウン開始
startFlag = true;
counter = data;
txtCount.setText("" + counter);
thread = new Thread(this);
thread.start();
}
public void run(){
while(startFlag) {
try {
Thread.sleep(300); //0.3秒間眠る
if(counter == 0) counter = 9; //0なら元の9に戻る
else counter--;
txtCount.setText("" + counter);
}
catch(InterruptedException e){
break;
}
}
thread = null;//同期しないタイミングがあったので追加
}
public void actionPerformed (ActionEvent e){
startFlag = false;
while(thread != null)//同期しないタイミングがあったので追加
; //何もしないで止まるのを待つ
observer.update(); //通知★★★
}
}
──────────────────────────────────────
//簡単なスロットマシン(カウントダウンするパネルを別途に作って3つ配置)jar内のアプレット起動指定
//インターフェイスの応用プログラム
/* */
/* jarファイル作成コマンド
%JAVA_HOME%\bin\jar cvf applet65.jar applet65.class TimeObserver.class CountDownPanel.class
*/
import java.applet.*;
import java.awt.*; //Graphics使用
import java.awt.event.*;//
public class applet65 extends Applet implements ActionListener,TimeObserver{
CountDownPanel unit[] = new CountDownPanel[3];
Button startBtn;
TextField msg; //メッセージ用
public void init(){//アプレットがロードされた時に呼ばれる。
setLayout(new BorderLayout());
Panel panel = new Panel();
add(panel, BorderLayout.NORTH);
panel.add(unit[0] = new CountDownPanel(this));//監視役がthis
panel.add(unit[1] = new CountDownPanel(this));
panel.add(unit[2] = new CountDownPanel(this));
add(startBtn = new Button("START"),BorderLayout.CENTER);
add(msg = new TextField("START押して"),BorderLayout.SOUTH);
startBtn.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
for(int i = 0; i < unit.length; i++){
int r = (int)(java.lang.Math.random() * 10);//乱数0〜9を生成
unit[i].setDownStart(r);//乱数を初期値にしてスタート
}
msg.setText("止めて数を合わる。うまくいくか?");
}
public void update(){ //止まったら通知される。★★★
for(int i = 0; i < unit.length; i++){//全て止まったか?
if(unit[i].startFlag == true)
return;//動いているなのがある。
}
for(int i = 1; i < unit.length; i++){//一致しているか?
if(unit[0].counter != unit[i].counter) {
msg.setText("はずれー! またチャレンジ");
return;
}
}
msg.setText("全て一致で、おめでとー! ");
}
}
[戻る]
66---プログラム概要: 三角形を左右に動かすアニメーション(パッケージを利用)
作成されたtestMain.jar
//Stageフォルダを作成し、その中にこのソースファイルを置く。
//Stageフォルダがあるディレクトリをカレントディレクトリにし、次のコマンドで翻訳する。%JAVACEXE1%はjavacコマンドを意味する。
//『%JAVACEXE1% Stage\testMain.java』
//以上で、testMain.class とStage.classがStageフォルダの中に作成される。
//Stageフォルダの中にtestMain2.txtが存在し、次の内容であるとする。
/*
Main-Class: Stage/testMain
Class-Path: testMain.jar .
*/
//次のコマンドで、カレントディレクトリにtestMain.jarを作成する。
//『%JAVA_HOME%\bin\jar.exe cmvf Stage\testMain2.txt testMain.jar Stage\testMain.class Stage\Stage.class』
package Stage;
import java.awt.*;//各種部品
import java.awt.event.*; //WindowListener利用のため
import java.awt.image.*; //BufferedImage利用のため
class Stage extends Canvas implements Runnable{ //アニメーションなどの動画ステージ用
public static int WIDTH = 320;
public static int HEIGHT = 240;
public static Color backColor = new Color(200,200,200);
public int paintCycle=10; //描画サイクル(ミリ秒)
public Thread thread = null; //描画サイクル用スレッド
Image image; //画像管理用
int x[] = {50,75,100};//三角形のポリゴン座標(x軸)
int y[] = {50,20,50};// (y軸)
int dx = 5;//移動速度
public Stage(){
this.setSize(WIDTH,HEIGHT);
image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);//画像生成
this.thread = new Thread(this);
this.thread.start();//スレッドスタート
}
public synchronized void update(Graphics g){ //画面をクリアせずに、paintを呼ぶスタイル
paint(g);
}
public void paint(Graphics g){//システムからの描画要求で呼ばれる
setImage(g);
}
public void setImage(Graphics g){
Graphics graph = image.getGraphics();//imageに描画するためのGraphicsを取得
graph.setColor(backColor);
Dimension d = this.getSize();
graph.fillRect(0,0,d.width, d.height);
Color color = new Color(255,0,0);
graph.setColor(color);
graph.fillPolygon(x,y,x.length);
g.drawImage(image, 0, 0, this);//記憶されるイメージを描画
}
public void run(){
while(this.thread != null){
try {
Thread.sleep(paintCycle);
for(int i = 0; i < x.length; i++){ //x[] 配列全体を変更
x[i]+=dx;
}
if(x[0]>200 || x[0] < 0){
dx = -dx;
}
this.repaint();
}
catch(Exception e){
System.out.println(e.toString());
}
}
}
}
public class testMain extends Frame implements WindowListener {//アニメーション用になるキャンバスの派生クラス
Stage stage; //アニメーション用
static public void main(String argv[]){
testMain m = new testMain();
}
public testMain(){
stage = new Stage();
add(stage);
setLocation(100,100);//位置変更
addWindowListener(this);//ウィンドウイベント処理インスタンス登録
this.setSize(320,240);
show(); //表示
}
public void windowOpened(WindowEvent e) { //ウィンドウが最初に可視になった
}
public void windowClosed(WindowEvent e) { //ウィンドウがクローズされた
}
public void windowClosing(WindowEvent e) {//ユーザが、ステムメニュー(クローズボックスなど)でウィンドウを閉じた
stage.thread = null;
this.dispose(); //すべてのネイティブスクリーンリソースを解放(ウインドウが無くなる)
}
public void windowIconified(WindowEvent e) {//ウィンドウが最小化された
}
public void windowDeiconified(WindowEvent e) {//他の状態から通常の状態になった
}
public void windowActivated(WindowEvent e) {//Window がアクティブ化
}
public void windowDeactivated(WindowEvent e) { //Window がアクティブでなくなった
}
}