[戻る]

01-----なにもしない最も簡単なJava Appletプログラム

//★確認 プレットクラスの描き方が分かったか?
/* 
   */ 
/*<applet code="applet01" Width="240" Height="180" align="right"> 
  </applet> */ 
  //↑
  //appletviewer applet01.javaで実行させる場合は必ず必要で、コンパイルしておく

import java.applet.*;	//java.appletの直下にあるクラスを使えるようにする。

public class applet01 extends Applet {

    //public void paint(java.awt.Graphics g){ g.drawString("Hello",50,50); }
    //確認後に上記コメントを外す。
}






[戻る]

02-----色々と描画してみるアプレットプログラム

//★ Graphicsクラスの概要が分かったか? paintメソッドがどのようなものか?
/* 
   */
import java.applet.*;
import java.awt.*;
public class applet02 extends Applet {
	public void paint(Graphics g){//システムからの描画要求で呼ばれる
		//背景サイズを取得
		int w = this.getWidth();
		int h = this.getHeight();
		
		//背景を希望色塗りつぶし
		g.setColor(new Color(0,255,255)); //シアン
		g.fillRect(0,0,w,h);
		
		//文字を指定位置へ描画
		//デフォルトフォント、太字、18ポイントのフォントを用意
		Font font = new Font(null,Font.BOLD,18);
		g.setFont(font);
		g.setColor(new Color(255,0,0)) ; //赤
		g.drawString("幅:"+w, 10,20);
		g.drawString("高さ"+h, 10,50);
		
		//座標(20,100)と座標(120,102)間に線を描画する
		g.setColor(new Color(0,0,255)) ; //青
		g.drawLine(20,100,120,102);//線を描画
	}
}





[戻る]

03-----画像を描画してみるアプレット

//画像を描画してみるアプレット
//★確認:画像の描画方法、initメソッドで、applet内の各種情報を初期設定します。
/* 
   */
import java.applet.*;
import java.awt.*;

public class applet03 extends Applet {
	Image image;
	Font font;
	public void paint(Graphics g) {
		g.drawImage(image, 0, 0, this);//画像を表示
		g.setFont(font);
		g.drawString("heno.jpgの画像",20,20);
	}
  
	//このアプレット(applet04)がロードされる時に自動実行するメソッド(決まっている)
	public void init() { 
		this.setBackground(new Color(0,255,255));
		font = new Font("gothic",Font.ITALIC ,20); //font名は、その存在が場合だけで書かない方がよい
		//このhtmlがある所と同じ所から、『heno.gif』のイメージを読み取る
		java.net.URL basUrl = getDocumentBase();
		image = this.getImage(basUrl, "heno.jpg");
		
		//showStatus(basUrl.toString());//デバック用 ドキュメントがあるURLを表示
	}
}









[戻る]

041-----前に作ったアプレットを再利用するアプレット

//★確認:04 01のapplet01を継承して、変更したアプレット extendsの意味がわかったか?
//        initを再定義している。⇒オーバーライドとは?

/* 
   */
import java.applet.*;
import java.awt.*;
import java.lang.*;
public class applet041 extends applet01 {
	Font font;

	public void init() { //このアプレット(applet04)がロードされる時に自動実行するメソッド(決まっている)
		super.init();////継承元(親のクラス)をスーパークラスを初期化
		this.setBackground(new Color(255,100,255));
		font = new Font(null,Font.ITALIC ,20);
		//this.setFont(font); //失敗する?
	}
	
	public void paint(Graphics g){
		super.paint(g); //継承元(親のクラス)をスーパークラスと呼びこれで、親のメソッドが呼べる。
		
		//以下は追加記述
		g.setFont(font);
		g.drawString("追加記述",50,100);
		int x = 100;
		int y = 90;
		int d = 50;
		g.drawLine(x+d,y-d,x-d,y+d);	//右上から左下へ線描画
		g.drawLine(x-d,y-d,x+d,y+d);	//左上から右下へ線描画
	}
}








[戻る]

042----自分で新しいメソッドを追加

★確認:自作メソッドの作り方⇒アプレットにdrawXを作る
/* 
   */
import java.applet.*;
import java.awt.*;
import java.lang.*;
public class applet042 extends Applet {
	
    public void init() { //このアプレット(applet04)がロードされる時に自動実行するメソッド(決まっている)
        this.setBackground(new Color(100,255,100));
    }
	
    public void paint(Graphics g){
	drawRhombus(g,100,140,10);				   //菱形塗りつぶし描画
	this.drawX(g,60,150,5,new Color(255,0,0)); //×描画
	this.drawX(g,30,100,30,new Color(0,0,255)); //×描画
	drawRhombus(g,150,50,5);				   //菱形塗りつぶし描画
    }
	
    //gの描画属性で、(x,y)座標をへ×の描画のcの色で、rの2倍の長さで行う。
    public void drawX(Graphics g,int x, int y,int r, Color c){//←追加したメソッド
	Color back = g.getColor();//現在の色を記憶
	g.setColor(c);	//色をcへ変更
		
	//中心からのx方向(またはy方向)の描画開始距離を求める
	//int d = (int)Math.sqrt(r*r/2);
	//java.lang.Double dd = new java.lang.Double(Math.sqrt(r*r/2));
	//int d =  dd.intValue();
	int d =  new java.lang.Double(Math.sqrt(r*r/2)).intValue();

	g.drawLine(x+d,y-d,x-d,y+d);	//右上から左下へ線描画
	g.drawLine(x-d,y-d,x+d,y+d);	//左上から右下へ線描画
	g.setColor(back);//色を変更前に戻す。
    }
	
    //gの描画属性で、(x,y)座標を中心に菱形塗りつぶしを描画する。
    public void drawRhombus(Graphics g,int x, int y,int r){//←追加したメソッド
	int ax[] = new int [4];	//4個の配列を用意
	int ay[] = new int [4];	
	ax[0] = x;		//菱形の上座標
	ay[0] = y - r;
	
	ax[1] = x + r;	//菱形の右座標
	ay[1] = y;
	
	ax[2] = x;		//菱形の下座標
	ay[2] = y + r;
		
	ax[3] = x - r;	//菱形の左座標
	ay[3] = y;
	g.fillPolygon(ax,ay,4); //塗り付き多角形描画
    }
}







[戻る]

051-----機能を再利用する方法1⇒インスタンスに対する機能として定義する。

//★良くない! 次のapplet052の例にすべきであるが、なぜか分かったか?
// GUtility.java :-----------------------------------------------------------
import java.awt.*;
import java.lang.*;
public class GUtility { //グラフ ユーティリティ
	
	//gの描画属性で、(x,y)座標をc中心に、x,y方向へdの変位を持つ始点、終点で描く。
	public void drawX(Graphics g,int x, int y,int d){
		g.drawLine(x+d,y-d,x-d,y+d);	//右上から左下へ線描画
		g.drawLine(x-d,y-d,x+d,y+d);	//左上から右下へ線描画
	}
	
	//gの描画属性で、(x,y)座標を中心に菱形塗りつぶしを描画する。
	public void drawRhombus(Graphics g,int x, int y,int d){
		int ax[] = {  x,x+d,  x,x-d};	//4個の配列を初期化して用意
		int ay[] = {y-d,  y,y+d,  y};
		g.fillPolygon(ax,ay,4); //塗り付き多角形描画
	}
}
//------------------------------------------------------------------------------
//上記のGUtiliy クラスにメソッドをまとめ、それを利用する。
/* 
   */
import java.applet.*;
import java.awt.*;

public class applet051 extends Applet {
	
    public void init() { //このアプレットがロード時に自動実行
        this.setBackground(new Color(100,255,0));//背景
    }
	
    public void paint(Graphics g){
	GUtility gu = new GUtility();	//オブジェクト用意しないと使えない。
	g.setColor(new Color(255,0,0));	//赤
	gu.drawX(g,60,150,5); 			//×描画
	gu.drawRhombus(g,100,140,10);	//菱形塗りつぶし描画
	g.setColor(new Color(0,0,255));	//青
	gu.drawX(g,30,100,30); 			//×描画
	gu.drawRhombus(g,150,50,5);		//菱形塗りつぶし描画
    }
}









[戻る]

052-----機能を再利用する方法2⇒クラス共有(static)機能として定義する。方法1より良い!

// GUtility2.java :-----------------------------------------------------------
import java.awt.*;
import java.lang.*;
public class GUtility2 { //グラフ ユーティリティ
	
	//gの描画属性で、(x,y)座標をc中心に、x,y方向へdの変位を持つ始点、終点で描く。
	public static void drawX(Graphics g,int x, int y,int d){
		g.drawLine(x+d,y-d,x-d,y+d);	//右上から左下へ線描画
		g.drawLine(x-d,y-d,x+d,y+d);	//左上から右下へ線描画
	}
	
	//gの描画属性で、(x,y)座標を中心に菱形塗りつぶしを描画する。
	public static void drawRhombus(Graphics g,int x, int y,int d){
		int ax[] = {  x,x+d,  x,x-d};	//4個の配列を初期化して用意
		int ay[] = {y-d,  y,y+d,  y};
		g.fillPolygon(ax,ay,4); //塗り付き多角形描画
	}
}
//-----------------------------------------------------------------------------
//GUtiliy2クラスへスタティックメソッドでまとめ、それを利用する。
/* 
   */
import java.applet.*;
import java.awt.*;

public class applet052 extends Applet {
	
    public void init() { //このアプレットがロードされる時に自動実行
        this.setBackground(new Color(100,255,0));//背景変更
    }
	
    public void paint(Graphics g){
	 //GUtility2 gu = new GUtility(); ←生成の必要がない
	g.setColor(new Color(255,0,0));	//赤
	GUtility2.drawX(g,60,150,5); 			//×描画(クラス名で呼び出し)
	GUtility2.drawRhombus(g,100,140,10);	//菱形塗りつぶし描画(クラス名で呼び出し)
	g.setColor(new Color(0,0,255));	//青
	GUtility2.drawX(g,30,100,30); 			//×描画(クラス名で呼び出し)
	GUtility2.drawRhombus(g,150,50,5);		//菱形塗りつぶし描画(クラス名で呼び出し)
    }
}








[戻る]

053-----機能を再利用する方法3⇒インスタンス内部情報に対する機能として定義する。

// XY.java :-----------------------------------------------------------
import java.awt.*;
// 座標のx,yを記憶するクラス(その座標を中心に描画するXメソッド)
public class XY {
	int x;	//x座標
	int y;	//y座標
	
	//クラスと同じ名前で、戻り値型を指定しない特別なメソッド⇒コンストラクタ
	public XY(int ix,int iy){ // new の生成時にだけ呼び出すもので、インスタンスの初期設定に使われる。
		x = ix;	//引数で設定する
		y = iy;
	}
	
	//gの描画属性で、(x,y)座標をc中心に、x,y方向へdの変位を持つ始点、終点で描く。
	public void drawX(Graphics g,int d){
		g.drawLine(x+d,y-d,x-d,y+d);	//右上から左下へ線描画
		g.drawLine(x-d,y-d,x+d,y+d);	//左上から右下へ線描画
	}
	
	//gの描画属性で、(x,y)座標を中心に菱形塗りつぶしを描画する。
	public void drawRhombus(Graphics g,int d){
		int ax[] = {  x,x+d,  x,x-d};	//4個の配列を初期化して用意
		int ay[] = {y-d,  y,y+d,  y};
		g.fillPolygon(ax,ay,4); //塗り付き多角形描画
	}
}
// ----------------------------------------------------------------------------
//xとyの座標記憶用フィールドを持つXYクラスを作り、それを利用する。
/* 
   */
import java.applet.*;
import java.awt.*;

public class applet053 extends Applet{
	
    public void init() { //アプレットロードに自動実行
        this.setBackground(new Color(100,255,0));//背景色
    }
	
    public void paint(Graphics g){
	XY xy1 = new XY(60,150); //←座標でXYインスタンスを生成
	XY xy2 = new XY(100,140); //←座標でXYインスタンスを生成
	g.setColor(new Color(255,0,0));	//赤
	xy1.drawX(g,5); 			//×描画)
	xy2.drawRhombus(g,10);		//菱形塗りつぶし描画
		
	g.setColor(new Color(0,0,255));	//青
	xy1.x = 30;	//フィールド変更(位置変更)
	xy1.y = 100;
	xy1.drawX(g,30); 			//×描画
	xy2.x = 150;//フィールド変更(位置変更)
	xy2.y = 50;
	xy2.drawRhombus(g,5);		//菱形塗りつぶし描画
    }
}






[戻る]

054-----機能を再利用する方法4⇒既存クラスで利用できるクラスを探し、その派生クラスに作る。

// 座標x,yを記憶する既存のクラスPointを継承し、そのクラスにメソッドを定義する。
import java.awt.*;	//Graphicsクラス参照用
import java.lang.*;	//Pointクラス参照用

public class XY2 extends Point{
	//継承したPointにあるx,yを使うので、フィールド宣言は不要
		
	//クラスと同じ名前で、戻り値型を指定しない特別なメソッド⇒コンストラクタ
	public XY2(int ix,int iy){ // new の生成時にだけ呼び出すもので、インスタンスの初期設定に使われる。
		super(ix,iy);	//親クラス(継承元java.lang.Point)のコンストラクタを実行
	}
	
	//gの描画属性で、(x,y)座標をc中心に、x,y方向へdの変位を持つ始点、終点で描く。
	public static void drawX(Graphics g,int x, int y,int d){
		g.drawLine(x+d,y-d,x-d,y+d);	//右上から左下へ線描画
		g.drawLine(x-d,y-d,x+d,y+d);	//左上から右下へ線描画
	}
	
	//gの描画属性で、(x,y)座標を中心に菱形塗りつぶしを描画する。
	public static void drawRhombus(Graphics g,int x, int y,int d){
		int ax[] = {  x,x+d,  x,x-d};	//4個の配列を初期化して用意
		int ay[] = {y-d,  y,y+d,  y};
		g.fillPolygon(ax,ay,4); //塗り付き多角形描画
	}
}
// ----------------------------------------------------------------------------
//xとyの座標を記憶するPointを継承したXY2クラスを作り、それを利用する。
/* 
   */
import java.applet.*;
import java.awt.*;

public class applet054 extends Applet{
	XY2 xy;
	
    public void init() { //new の生成時に呼び出され、初期設定に使われる。
        setBackground(new Color(100,255,0));
    }
	
    public void paint(Graphics g){
	XY2 xy1 = new XY2(60,150); //←座標でXYインスタンスを生成
	XY2 xy2 = new XY2(100,140); //←座標でXYインスタンスを生成
	g.setColor(new Color(255,0,0));	//赤
	xy1.drawX(g,5); 			//×描画)
	xy2.drawRhombus(g,10);		//菱形塗りつぶし描画
		
	g.setColor(new Color(0,0,255));	//青
	xy1.setLocation(30,100);	//フィールド変更(位置変更)
	xy1.drawX(g,30); 			//×描画
	xy2.setLocation(150,50);//フィールド変更(位置変更)
	xy2.drawRhombus(g,5);		//菱形塗りつぶし描画
    }
}






[戻る]

06-----クラスを再利用する例(同じファイルで作る:外部ファイルから見えないクラスになる)

/* 
   */
//drawXで、×の描画でなく、◆描画を行える新しいクラスXYRを、XY2の継承で作る。
import java.applet.*;
import java.awt.*;//描画の場合は、java.awt.クラスを使えるようにする必要がある。
import java.awt.event.*; //MouseListenerインターフェイスを使う。

class XYR extends XY2 {	//以前に作ったXY2を継承して、菱形描画をdrawXで行えるクラスXYRを作る
	
	public XYR(int ix,int iy){
		super(ix,iy);	//XY2のコンストラクタを実行
	}
	
	//drawX×描画を変更し、菱形描画を行うように再定義する。(オーバーライドと言う)
	public void drawX(Graphics g,int d){
		super.drawRhombus(g,d); //drawXで菱形描画へ変更
	}
}

public class applet06 extends Applet implements MouseListener {
	
	XY2 a[];
	int count = 0;	//初期化を伴うフィールド

	public void init(){//アプレットがロードされた時に呼ばれる。
		this.setBackground(new Color(100,255,255));
		a = new XY2[10];
		this.addMouseListener(this);
	}
	
	public void paint(Graphics g){//システムからの描画要求で呼ばれる
		g.setColor(new Color(255,0,0));
		for(int i = 0; i < a.length; i++){
			if(a[i] != null){
				a[i].drawX(g,5);	//a[i]がXY2クラスなら×、XYRクラスなら◆を描画
			}
		}
	}
	
	public void mouseClicked(MouseEvent e){
		int x = e.getX();	//マウスクリックイベントが発生した位置を取得
		int y = e.getY();
		int status = e.getModifiers(); //状態を取得
		this.showStatus(""+status+","+e.BUTTON1_MASK);
		if((status & e.BUTTON1_MASK) != 0){	//左ボタン?
			a[count++] = new XY2(x,y);	//座標オブジェクトXY2生成
		}else if((status & e.BUTTON3_MASK) != 0){	//右ボタン
			a[count++] = new XYR(x,y);	//座標オブジェクトXYR生成
		}
		this.repaint();		//再描画指示
	}
	
	public void mousePressed(MouseEvent e){showStatus("Pressed"); }

	public void mouseReleased(MouseEvent e){showStatus("Released");}
	
	public void mouseEntered(MouseEvent e){showStatus("Entered");}
	
	public void mouseExited(MouseEvent e){showStatus("mouseExited");}
}

[戻る]

061---クラスの中でクラスを定義する(インナークラスと呼ぶ)

// 
//applet06 で、XY2を再利用してXYRを定義した。
//XY2の『X』の描画をするdrawXメソッドを、XYRのdrawXメソッドでは、『◆』の描画をするように変更した。
//同じことを行わせるが、インナークラスでは、Colorのメンバを持たせ、マウスプレス時のテキストフィールド
//の赤色の情報を記憶し、その色で描画するように変更した。
//インナークラスでは、外側のクラスメンバを容易にアクセスできる所に注目のこと。

/* 
   */
//drawXで、×の描画でなく、◆描画を行える新しいクラスXYRを、XY2の継承で作る。
import java.applet.*;
import java.awt.*;//描画の場合は、java.awt.クラスを使えるようにする必要がある。
import java.awt.event.*; //MouseListenerインターフェイスを使う。

public class applet061 extends Applet implements MouseListener {
	TextField txt_red;
	XY2 a[];
	int count = 0;	//初期化を伴うフィールド
	
	class XYR extends XY2 {	//以前に作ったXY2を継承して、菱形描画をdrawXで行えるクラスXYRを作る
		Color color;
		public XYR(int ix,int iy){
			super(ix,iy);	//XY2のコンストラクタを実行
			int red = Integer.parseInt(txt_red.getText()); //テキストフィールドの文字を数字へ
			applet061.this.showStatus(String.valueOf(red));	//←インナークラス内から外側のthisを指定する方法
			color = new Color(red,0,0);
		}
		
		//drawX×描画を変更し、菱形描画を行うように再定義する。(オーバーライドと言う)
		public void drawX(Graphics g,int d){
			g.setColor(this.color);
			super.drawRhombus(g,d); //drawXで菱形描画へ変更
		}
	}


	public void init(){//アプレットがロードされた時に呼ばれる。
		this.setBackground(new Color(100,255,255));
		a = new XY2[10];
		add(txt_red = new TextField("200")); //テキストフィールド生成
		this.addMouseListener(this);
	}
	
	public void paint(Graphics g){//システムからの描画要求で呼ばれる
		for(int i = 0; i < a.length; i++){
			if(a[i] != null){
				a[i].drawX(g,5);	//a[i]がXY2クラスなら×、XYRクラスなら◆を描画
			}
		}
	}
	
	public void mousePressed(MouseEvent e){ 
		int x = e.getX();	//マウス・プレス・イベントが発生した位置を取得
		int y = e.getY();
		a[count++] = new XYR(x,y);	//座標オブジェクトXYR生成
		this.repaint();		//再描画指示
	}

	public void mouseClicked(MouseEvent e){	}
	public void mouseReleased(MouseEvent e){ }
	public void mouseEntered(MouseEvent e){ }
	public void mouseExited(MouseEvent e){ }
}

[戻る]

062---在るクラス(XYR)を継承した無名クラス(インナークラスと同じ性質)を定義して利用する

/* 
   */
//drawXで、×の描画でなく、◆描画を行える新しいクラスXYRを、XY2の継承で作る。
import java.applet.*;
import java.awt.*;//描画の場合は、java.awt.クラスを使えるようにする必要がある。
import java.awt.event.*; //MouseListenerインターフェイスを使う。

public class applet062 extends Applet implements MouseListener {
	TextField txt_red;
	XY2 a[];
	int count = 0;	//初期化を伴うフィールド
	int cx;
	int cy;

	class XYR extends XY2 {
		Color color;
		applet062 that; 
		public XYR(int ix,int iy){//コンストラクタ
			super(ix,iy);	//XY2のコンストラクタを実行
			int red = Integer.parseInt(txt_red.getText());//文字列を数字へ
			applet062.this.showStatus(String.valueOf(red));
			//^^^^^^インナークラス内から外側のthisを指定する方法
			color = new Color(red,0,0);
		}
		public void drawX(Graphics g,int d){
			g.setColor(this.color);
			super.drawRhombus(g,d); //drawXで菱形描画へ変更
		}
		
		public XYR() {	//引数なしのコンストラクタを無理やり追加
			super(0,0);
			that = applet062.this; //←インナークラス内から外側のthisを指定する方法
			setXYR();
		}
		void setXYR(){ //派生クラスでコンストラクタ内を変更できるようにする細工
			x = cx;
			y = cy;
			int red = Integer.parseInt(txt_red.getText()); //テキストフィールドの文字を数字へ
			applet062.this.showStatus(String.valueOf(red));	
			color = new Color(red,0,0);
		}
	}
	
	public void init(){//アプレットがロードされた時に呼ばれる。
		this.setBackground(new Color(100,255,255));
		a = new XY2[10];
		add(txt_red = new TextField("200")); //テキストフィールド生成
		this.addMouseListener(this);
	}
	
	public void paint(Graphics g){//システムからの描画要求で呼ばれる
		for(int i = 0; i < a.length; i++){
			if(a[i] != null){
				a[i].drawX(g,5);	//a[i]がXY2クラスなら×、XYRクラスなら◆を描画
			}
		}
	}
	
	public void mousePressed(MouseEvent e){ 
		cx = e.getX();	//マウス・プレス・イベントが発生した位置を取得
		cy = e.getY();
		a[count++] = new XYR(){	// 無名オブジェクト(applet61での名前:XYR)生成
		
				//drawX×描画を変更し、菱形描画を行うように再定義する。(オーバーライド)
				public void drawX(Graphics g,int d){
					g.setColor(this.color);
					super.drawRhombus(g,d); //drawXで菱形描画へ変更(オーバーライド)
				}
				
				void setXYR(){//XYRのsetXYRを変更する
					x = that.cx;	//x = cx;は、出来なかった!(cxは、外部の、また外側になる)
					y = that.cy;
					color = new Color(0,255,0);
				}

		};

		this.repaint();		//再描画指示
	}

	public void mouseClicked(MouseEvent e){	}
	public void mouseReleased(MouseEvent e){ }
	public void mouseEntered(MouseEvent e){ }
	public void mouseExited(MouseEvent e){ }
}

[戻る]

07 簡単なカード型データベース インターフェースの考える前の例

/* 
   */
import java.applet.*;
import java.awt.*; //Graphics使用
import java.awt.event.*;//ActionListenerを使う
import java.util.*;//Vectorを使う

public class applet07 extends Applet {
	TextField txtName;	//名前入力用
	Label lbl_idx;

	public Vector v = new Vector(2);//初期要素数
	int idx = 0; //現在の操作対象添え字
	
	class MemoMember0 {//個人を記憶する
		String name;	//名前
		//アドレスなど その他 色々あってよい。
	}

	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);
	}
	
	public void goNext(){//次の位置へ進む
		set_idx(idx);	//表示内容を記憶
		idx++;
		if(idx >= v.size()){
			v.setSize(idx+1);//(idx+1)の添え字を使える容量まで増やす
			//内部で、ensureCapacityメソッドが実行されている。
		}
		get_idx(idx);	//記憶内容を表示
		showStatus("size:" + v.capacity());//デバック確認用
	}

	public void goBack(){//前の位置へ進む
		set_idx(idx);	//表示内容を記憶
		if(idx > 0) {
			idx--;
		}
		get_idx(idx);	//記憶内容を表示
	}

	public void init(){//アプレットがロードされた時に呼ばれる。
		v.add(null);	//先頭データをダミーで追加
		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("次へ→"));
		
		btnNext.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
						goNext();
				}
		});
		btnBack.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
						goBack();
				}
		});
	}
}


[戻る]

071 簡易カード型データベース2 自作インターフェイスを使う


//集合体のi番目要素と画面の関係を取り持つインターフェースを作る。
// applet07 のメソッドをインターフェースにしている。
public interface  GUIOperator { //画面周りの操作用インターフェイス
	public void set_idx(int i);	//表示中データをi番目へ記憶する命令
	public void get_idx(int i);	//i番目の記憶内容を表示する命令
	//void xyz(){}	//インタフェースメソッドが本体を持つことはできない
}
//-------------------------------------------------------------------------------
//集合管理クラス 内部にVectorメンバと、現在のアクセス要素を指すidxを持つものとして設計

import java.util.*;// Vector 利用のため

public class Aggregation { //集合体
	GUIOperator operator;
	public Vector v = new Vector(2);//初期要素数
	int idx = 0; //現在の操作対象添え字
	
	public Aggregation(){	//コンストラクタ
			v.add(null);	//先頭データをダミーで追加
	}
	
	public void addOperator(GUIOperator obj){ // add○×△Listenerに対応するメソッド
		operator = obj; //オペレーションしてくれるオブジェクトをセット
	}

	public void goNext(){//次の位置へ進む
		operator.set_idx(idx);	//表示内容を記憶
		idx++;
		if(idx >= v.size()){
			v.setSize(idx+1);//(idx+1)の添え字を使える容量まで増やす
			//内部で、ensureCapacityメソッドが実行されている。
		}
		operator.get_idx(idx);	//記憶内容を表示
	}

	public void goBack(){//前の位置へ進む
		operator.set_idx(idx);	//表示内容を記憶
		if(idx > 0) {
			idx--;
		}
		operator.get_idx(idx);	//記憶内容を表示
	}
}
//----------------------------------------------------------------------------------------
//簡易カード型データベース2 自作インターフェイスを使ったアプレット
/* 
   */
import java.applet.*;
import java.awt.*; //Graphics使用
import java.awt.event.*;//

public class applet071 extends Applet implements  GUIOperator{
	TextField txtName;	//名前入力用
	Label lbl_idx;
	
	Aggregation 集合体 = new Aggregation();	//GUIOperatorを使う集合体
	
	class MemoMember0 {//個人を記憶する
		String name;	//名前
	}

	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);
	}

	public void init(){//アプレットがロードされた時に呼ばれる。
		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("次へ→"));
		
		btnNext.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
						集合体.goNext();
				}
		});
		btnBack.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
						集合体.goBack();
				}
		});
		
		集合体.addOperator(this);// addActionListenerに対応する
	}
}


[戻る]

08---例外処理 その1 エラーを回避する方法(数値以外の入力、配列範囲外の添え字アクセス)

//着目点 どんな種類のエラーになるか? どうやって実行エラーを無くすか?
/* 
   */
import java.applet.*;	//Applet利用のため
import java.awt.*; 	//TextFieldなど利用のため
import java.awt.event.*;//ActionListener利用のため
//import java.lang.*;	//Exception利用のため

public class applet08 extends Applet implements  ActionListener{
	TextField txt1,txt2,txt3,txt4;
	double data[] = new double[3];

	public void init(){//アプレットがロードされた時に呼ばれる。
		Button btn = new Button("=");
		this.add(txt1 = new TextField("100.0"));
		this.add(new Label("÷"));
		this.add(txt2 = new TextField("0.0"));
		this.add(btn);
		this.add(new Label("data["));
		this.add(txt3 = new TextField("2"));
		this.add(new Label("]"));
		this.add(txt4 = new TextField("結果:",40));
		btn.addActionListener(this);
	}
	
	public void actionPerformed(ActionEvent e){
		try {
			double d1 = Double.parseDouble(txt1.getText());
			double d2 = Double.parseDouble(txt2.getText());
			int i = Integer.parseInt(txt3.getText());
			data[i] = (int)d1 / (int)d2;
			//data[i] = d1 / d2;
			if(Double.isInfinite(data[i])){
				txt4.setText("無限大で計算できません");
			} else {
				txt4.setText("" + data[i]);
			}
			
		} 
		catch(ArrayIndexOutOfBoundsException e0){
			txt4.setText(" 添え字入力値を訂正ください");
		}
		catch(NumberFormatException e1){
			txt4.setText(" 数値を入力ください");
		}
		catch (Exception ex){ //その他のエラー
			txt4.setText(ex.toString());
		}
	}
}

[戻る]

---

---
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送