//
/* ----------------------------------------------------------------------------------------------
isbn.java ISBN ver. 1.00 (JDK 1.02)
ueyama@infonet.co.jp 2002.08.19
update: 2008.05.18
---------------------------------------------------------------------------------------------- */
import java.applet.*;
import java.awt.*;
public class isbn extends Applet
{
int Bx=25, By=60; // ボタン表示 原点XY座標
int Ox[]={ 0, 0,40,80, 0,40,80, 0,40,80,80,125,125}; // ボタン表示 Xオフセット
int Oy[]={90,60,60,60,30,30,30, 0, 0, 0,90, 90, 60}; // ボタン表示 Yオフセット
boolean Md=true; // true: 新 ISBN false: 旧 ISBN
String Isbn=(Md)?"978-":""; // ISBN文字列, 計算式 (ステータスバー表示用)
int Sl=(Md)?4:0, Nq=0, Cs=0; // ISBN文字列 長さ,入力数字数, 検査数字
int Btn=-1; // クリックされたボタン No.
Image Img;
public void init()
{
String bg=getParameter("bgcolor"); // 背景色の読み込み
int bgc=Integer.valueOf(bg,16).intValue();
setBackground(new Color(bgc));
MediaTracker mt=new MediaTracker(this);
Img=getImage(getCodeBase(), getParameter("figure")); // gif ファイルの読み込み
mt.addImage(Img, 0);
try
{
mt.waitForID(0);
}
catch(InterruptedException e){};
}
public boolean inside(int x, int a, int b)
{
return (x<=Math.max(a,b) && x>=Math.min(a,b)) ? true:false;
}
public void dsp_p(int x, int y, int m, int n, int c) // 図や文字を表示する
{
Graphics gx=getGraphics();
int w=0, h=0, ox=0, oy=0;
switch(c)
{
case 0 : w=14; h=18; ox= 0; oy= 0; break; // 数字 (ボタン用)
case 1 : w=11; h=14; ox= 0; oy=18; break; // 数字 (ISBN 用)
case 2 : w=36; h=26; ox= 0; oy=46; break; // ボタン
case 3 : w=44; h=15; ox=132; oy=18; break; // "ISBN"
case 4 : w=30; h=13; ox= 72; oy=46; break; // ラジオボタン(新・旧)
}
gx.clipRect(x,y,w,h);
gx.drawImage(Img,x-(ox+m*w),y-(oy+n*h),this);
gx.dispose();
}
public void dsp_isbn() // ISBN 文字列の表示
{
int i,n;
Graphics gx=getGraphics();
gx.setColor(new Color(0xffffff)); // 表示領域のクリア
gx.fillRect(1, 21, 229, 26);
for(i=0; i0) // "BS" キーが押された
{
if(!"-".equals(Isbn.substring(Sl-1,Sl))) Nq--;
Isbn=Isbn.substring(0, Sl-1); Sl--;
break;
}
default: if(inside(Btn, 0, 10) && Nq<9) // "0〜9,-" キーが押された
{
if(Btn==10) Isbn+="-"; // "-" キーが押された
else Isbn+=""+Btn; // 数字 キーが押された
if(Btn<10) Nq++;
Sl++;
}
}
dsp_isbn(); // ISBN の表示
dsp_p(Bx+Ox[Btn], By+Oy[Btn], (Btn<12)? 0:1, 0, 2); // ボタンの表示
dsp_p(Bx+Ox[Btn]+13, By+Oy[Btn]+5, Btn, 0, 0); // ボタンの数字をずらせて表示
chk_s();
if(Nq==9) // 9 桁入力終了
{
dsp_p(Sl*13+6, 27, 11, 0, 1); // "-" の表示
dsp_p((Sl+1)*13+6, 27, Cs, 1, 1); // 検査数字の表示
}
}
if(x>195 && y>150) // ラジオボタンをクリック
{
Md=(inside(y, 150, 163))? true: false;
Isbn=(Md)?"978-":""; Sl=(Md)?4:0; Nq=0; // 初期化
repaint(); // 再描画
}
return true;
}
public boolean mouseUp(Event e, int x, int y) // マウスボタンが離されたときの処理
{
if(inside(Btn, 0, 13))
{
dsp_p(Bx+Ox[Btn], By+Oy[Btn], (Btn<12)? 0:1, 0, 2); // ボタンの数字を元に戻す
dsp_p(Bx+Ox[Btn]+12, By+Oy[Btn]+4, Btn, 0, 0);
}
return true;
}
}
// 戻る