//
/* ----------------------------------------------------------------------------------------------
    mos_tr.java		MOS トランジスタ						ver. 1.10 (JDK 1.02)
    														ueyama@infonet.co.jp  2005.01.28
    														update: 2007.08.03
---------------------------------------------------------------------------------------------- */

import java.applet.Applet;
import java.awt.*;


public class mos_tr extends Applet
{
	int			N=0, P=0;											// NMOS、PMOS の入力
	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=485; oy=  0; break;			// トランジスタ
			case	 1:	w=  9; h=14; ox=533; oy=  0; break;			// 2進数 (大)
			case	 3:	w=  6; h= 6; ox=533; oy= 28; 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()
	{
		dsp_g( 64, 50, T, (P==0)?1:0, 0);							// PMOSトランジスタの表示
		dsp_g(278, 50, T, N+2, 0);									// NMOSトランジスタの表示
		dsp_g(  2, 58, 0, P, 1);									// PMOSトランジスタ G 信号の表示
		dsp_g( 97,104, P, 1, 1);									// PMOSトランジスタ D 信号の表示
		dsp_g(215, 58, 0, N, 1);									// NMOSトランジスタ G 信号の表示
		dsp_g(311, 12, (N==0)?1:0, 0, 1);							// NMOSトランジスタ S 信号の表示
		dsp_g(409,120, 0, T, 3);									// ラジオボタン Tr の表示
		dsp_g(448,120, 0, (T==1)?0:1, 3);							// ラジオボタン SW の表示
	}   

	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(inside(y, 50, 80))										// 入力信号をクリック
		{
			if(x<55) P=(P==0)?1:0;
			if(inside(x, 210,270)) N=(N==0)?1:0;
		}
		if(x>402 && y>112)											// SW, Tr 表示の切り替え
		{
			T=(x>439)?0:1;
		}
		dsp_p();
		return true;
	}
}
//
戻る