//
/* ---------------------------------------------------------------------------------------------- not.java NOT 回路 ver. 1.10 (JDK 1.02) ueyama@infonet.co.jp 2005.01.16 update: 2007.08.03 ---------------------------------------------------------------------------------------------- */ import java.applet.Applet; import java.awt.*; public class not extends Applet { int A=0, P=1, N=0, X=1; // 入力 A、P,N MOS トランジスタ、 出力 X int T=1; // トランジスタの表示 0:SW 1:Tr 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")); 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_g(int x, int y, int m, int n, int c) { int w=0, h=0, ox=0, oy=0; switch(c) { case 0: w= 24; h=31; ox=350; oy= 0; break; // トランジスタ case 1: w= 9; h=14; ox=350; oy=124; break; // 2進数 (大) case 2: w= 8; h=12; ox=368; oy=124; break; // 2進数 (小) case 3: w= 6; h= 6; ox=384; oy=124; break; // ラジオボタンの・ } Graphics gx=getGraphics(); gx.clipRect(x,y,w,h); gx.clearRect(x,y,w,h); gx.drawImage(Img, x-(ox+m*w), y-(oy+n*h), this); gx.dispose(); } public void dsp_p() { X=P=(A==0)?1:0; N=A; dsp_g(102, 31, T, P, 0); // PMOS トランジスタの表示 dsp_g(102,105, T, N+2, 0); // NMOS トランジスタの表示 dsp_g( 6, 77, 1, A, 1); // 入力 A の表示 dsp_g(213, 77, 1, X, 1); // 出力 X の表示 dsp_g(291, 78, X, 0, 2); // 真理値表 A0 の表示 dsp_g(318, 78, X, 1, 2); // 真理値表 X1 の表示 dsp_g(291,103, A, 1, 2); // 真理値表 A1 の表示 dsp_g(318,103, A, 0, 2); // 真理値表 X0 の表示 dsp_g(275,144, 0, T, 3); // ラジオボタンの・ の表示 dsp_g(314,144, 0, (T==1)?0:1, 3); // ラジオボタンの・ の表示 } public void paint(Graphics g) { int i; g.clearRect(0, 0, size().width, size().height); g.drawImage(Img, 0, 0, this); dsp_p(); } public boolean mouseDown(Event e, int x, int y) { if(x<40 && inside(y, 63, 98)) A=(A==0)?1:0; // 入力信号をクリック if(inside(x, 281, 335)) // 真理値表をクリック { if(inside(y, 70, 96)) A=0; if(inside(y, 97, 122)) A=1; } if(x>268 && inside(y, 137, 156)) // ラジオボタンをクリック { if(x>306) T=0; else T=1; } dsp_p(); return true; } } //戻る