import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.math.*;

//Author:H.Hakan GENÇ - 2001-2002 - Turkiye
//GSM: +905052610452, E-mail:hasanhakangenc@hotmail.com

public class multivibrator extends Applet
{
	CizimAlani cizimAlani;
	Opamp opamp;
	Panel panel;
	String zeminRenk, onRenk;
	
	public void init(){
		zeminRenk = getParameter("zeminrenk");
		onRenk = getParameter("onrenk");
		
		if ((zeminRenk == null) ||
			(onRenk == null))
		{
			zeminRenk = "f0f0f0";
			onRenk = "000000";
		}
		
		setBackground(stringToColor(zeminRenk));
		setForeground(stringToColor(onRenk));
		
		setLayout(new FlowLayout(FlowLayout.LEFT));
				
		panel = new Panel();
		panel.setLayout(new BorderLayout());
		
		cizimAlani = new CizimAlani(zeminRenk);
		opamp = new Opamp(zeminRenk, cizimAlani);
		
		add(cizimAlani);
		add(opamp);
	}
	
	private Color stringToColor(String paramDeger)
	{
		int red;
		int green;
		int blue;

		red = (Integer.decode("0x" + paramDeger.substring(0,2))).intValue();
		green = (Integer.decode("0x" + paramDeger.substring(2,4))).intValue();
		blue = (Integer.decode("0x" + paramDeger.substring(4,6))).intValue();

		return new Color(red,green,blue);
	}
}

class CizimAlani extends Canvas{
	int yukseklik, genislik;
	int Vmax = 10;
	int referans = 16, eksen = 0;
	double pi;
	
	double R, R1, R2, C, beta, betaVmaks, tau;
	double betaVmaks_tI[] 	= new double[1500];
	double betaVmaks_tII[] 	= new double[1500];
	double betaVmaks_tIII[] = new double[1500];
	
	int  ref, zaman_ekseni, peryod_sayisi, tilk, t1, t2, Vmaks, i, peryod, Vilk, random;
	boolean cikis=false;
	
	Font gecerliFont;
	Image ekranDisiResim;
	Graphics gBellek;
	
	public CizimAlani(String renk){
		setBackground(Color.decode("#"+renk));	

		R 		= 10E+3;
		R1 		= 10E+3;
		R2 		= 10E+3;
		C 		= 10E-6;
		Vmaks 	= 10;
		ref 	= 16;
		
		beta 			= R1/(R1+R2);
		tau				= R*C*1000;
        i = 0;
		
		random = (int)(Math.random()*20);
		
		if(random>=10) Vilk = Vmaks;
		else if(random<10) Vilk = -Vmaks;
		
		betaVmaks		= beta*Vilk;

yeniden:
		while(!cikis){
			betaVmaks_tI[i] = Vilk*(1-Math.exp(-i/tau));
			if(Vilk>0){
				if(betaVmaks_tI[i]>=betaVmaks){ 
					cikis=true;
					tilk = i;
					break yeniden;
				}
			}
			else if(Vilk<0){
				if(betaVmaks_tI[i]<=betaVmaks){ 
					cikis=true;
					tilk = i;
					break yeniden;
				}
			}
			i++;
		}
		i = 0;
		cikis = false;
		
yeniden2:
		while(!cikis){
			betaVmaks_tII[i] = Vilk*(Math.exp(-i/tau) + beta*Math.exp(-i/tau) - 1);
			if(Vilk>0){
				if(betaVmaks_tII[i]<=-betaVmaks){
					cikis=true;
					t1 = i;
					break yeniden2;
				}
			}
			else if(Vilk<0){
				if(betaVmaks_tII[i]>=-betaVmaks){
					cikis=true;
					t1 = i;
					break yeniden2;
				}
			}
			i++;
		}
		i=0;
		cikis = false;
		
yeniden3:
		while(!cikis){
			betaVmaks_tIII[i] = Vilk*(1 - Math.exp(-i/tau) - beta*Math.exp(-i/tau));
			if(Vilk>0){
				if(betaVmaks_tIII[i]>=betaVmaks){
					cikis=true;
					t2=i;
					break yeniden3;
				}
			}
			else if(Vilk<0){
				if(betaVmaks_tIII[i]<=betaVmaks){
					cikis=true;
					t2=i;
					break yeniden3;
				}
			}
			i++;
		}
		i = 0;
		cikis = false;
		peryod = t1 + t2;
		peryod_sayisi = (int)(360/(t1+t2));
		pi = Math.PI;
	}
	
	public void guncelle(double R1, double R2, double R, double C){
        this.R 	= R;
		this.R1 = R1;
		this.R2 = R2;
		this.C	= C;
  
		beta 			= R1/(R1+R2);
		betaVmaks		= beta*Vilk;
		tau				= R*C*1000;
        i = 0;
				
yeniden:
		while(!cikis){
			betaVmaks_tI[i] = Vilk*(1-Math.exp(-i/tau));
			if(Vilk>0){
				if(betaVmaks_tI[i]>=betaVmaks){ 
					cikis=true;
					tilk = i;
					break yeniden;
				}
			}
			else if(Vilk<0){
				if(betaVmaks_tI[i]<=betaVmaks){ 
					cikis=true;
					tilk = i;
					break yeniden;
				}
			}
			i++;
		}
		i = 0;
		cikis = false;
		
yeniden2:
		while(!cikis){
			betaVmaks_tII[i] = Vilk*(Math.exp(-i/tau) + beta*Math.exp(-i/tau) - 1);
			if(Vilk>0){
				if(betaVmaks_tII[i]<=-betaVmaks){
					cikis=true;
					t1 = i;
					break yeniden2;
				}
			}
			else if(Vilk<0){
				if(betaVmaks_tII[i]>=-betaVmaks){
					cikis=true;
					t1 = i;
					break yeniden2;
				}
			}
			i++;
		}
		i=0;
		cikis = false;
		
yeniden3:
		while(!cikis){
			betaVmaks_tIII[i] = Vilk*(1 - Math.exp(-i/tau) - beta*Math.exp(-i/tau));
			if(Vilk>0){
				if(betaVmaks_tIII[i]>=betaVmaks){
					cikis=true;
					t2=i;
					break yeniden3;
				}
			}
			else if(Vilk<0){
				if(betaVmaks_tIII[i]<=betaVmaks){
					cikis=true;
					t2=i;
					break yeniden3;
				}
			}
			i++;
		}
		i = 0;
		cikis = false;
		peryod = t1 + t2;
		peryod_sayisi = (int)(360/(t1+t2));

		repaint();
	}
	
	public void paint(Graphics g){
		yukseklik = this.getSize().height; 
		genislik = this.getSize().width;
		ekranDisiResim = createImage(genislik, yukseklik);
		gBellek = ekranDisiResim.getGraphics();
		FontMetrics fm = gBellek.getFontMetrics();
		gecerliFont = gBellek.getFont();
		
		/*ilk eksen çiziliyor*/
		gBellek.drawString("Kapasitör Gerilimi (V)",10,20);
		gBellek.drawString("zaman (s)",genislik-80,yukseklik/6+5);
		gBellek.drawLine(10,yukseklik/6+10,380,yukseklik/6+10);
		gBellek.drawLine(10,yukseklik/6+9,380,yukseklik/6+9);
		gBellek.drawLine(15,yukseklik*1/3,15,20);
		gBellek.drawLine(16,yukseklik*1/3,16,20);
		
		gBellek.drawLine(13,24,15,20);// dikey ok çiziliyor
		gBellek.drawLine(18,24,15,20);
		
		gBellek.drawLine(375, yukseklik/6+7, 380, yukseklik/6+10);// yatay ok çiziliyor
		gBellek.drawLine(375, yukseklik/6+12, 380, yukseklik/6+10);
		
		gBellek.drawLine(ref-4,-(int)(3*betaVmaks)+yukseklik/6+10,ref+3,-(int)(3*betaVmaks)+yukseklik/6+10);
		gBellek.drawLine(ref-4,(int)(3*betaVmaks)+yukseklik/6+10,ref+3,(int)(3*betaVmaks)+yukseklik/6+10);
		gBellek.drawString(Float.toString((float)betaVmaks),ref+5,-(int)(3*betaVmaks)+yukseklik/6+10);
		gBellek.drawString(Float.toString((float)-betaVmaks),ref+5,(int)(3*betaVmaks)+yukseklik/6+20);
		/*ilk eksen çizildi*/
		
		gBellek.setColor(Color.black);
		/*ikinci eksen çiziliyor*/
		gBellek.drawString("Karşılaştırıcı Çıkışı (V)",10,yukseklik*1/3 + 20);
		gBellek.drawString("zaman (s)",genislik-80,yukseklik/2+5);
		gBellek.drawLine(10,yukseklik/2+10,380,yukseklik/2+10);
		gBellek.drawLine(10,yukseklik/2+9,380,yukseklik/2+9);
		gBellek.drawLine(15,yukseklik*2/3,15,yukseklik*1/3 + 20);
		gBellek.drawLine(16,yukseklik*2/3,16,yukseklik*1/3 + 20);
		
		gBellek.drawLine(13,yukseklik*1/3 + 24,15,yukseklik*1/3 + 20);// dikey ok çiziliyor
		gBellek.drawLine(18,yukseklik*1/3 + 24,15,yukseklik*1/3 + 20);
		
		gBellek.drawLine(375, yukseklik/2+7, 380, yukseklik/2+10);// yatay ok çiziliyor
		gBellek.drawLine(375, yukseklik/2+12, 380, yukseklik/2+10);
		/*ikinci eksen çizildi*/

        //kapasitör çikisi çiziliyor
		gBellek.setColor(Color.blue);
		for(int i=0;i<tilk;i++){
			gBellek.drawLine(ref+i,(int)((-3)*betaVmaks_tI[i])+yukseklik/6+10,ref+i+1,
									  (int)((-3)*betaVmaks_tI[i+1])+yukseklik/6+10);
		}
		
		for(int f=0;f<=peryod_sayisi;f++){
			for(int i=0;i<t1;i++){
				gBellek.drawLine(ref+tilk+i,(int)((-3)*betaVmaks_tII[i])+yukseklik/6+10,ref+tilk+i+1,
										 (int)((-3)*betaVmaks_tII[i+1])+yukseklik/6+10);
				gBellek.drawLine(ref+tilk+t1+i,(int)((-3)*betaVmaks_tIII[i])+yukseklik/6+10,ref+tilk+t1+i+1,
										 (int)((-3)*betaVmaks_tIII[i+1])+yukseklik/6+10);
			}
			ref += peryod;
		}
		ref=16;
		
		//karsilastirici cikisi çiziliyor
		gBellek.setColor(Color.decode("#007846"));
		gBellek.drawLine(ref,(int)(3*(-Vilk))+yukseklik/2+10,ref+tilk,(int)(3*(-Vilk))+yukseklik/2+10);
		for(int f=0;f<=peryod_sayisi;f++){
			gBellek.setColor(Color.decode("#007846"));
			gBellek.drawLine(ref+tilk,(int)(3*Vilk)+yukseklik/2+10,ref+tilk+t1,
									(int)(3*Vilk)+yukseklik/2+10);
			gBellek.drawLine(ref+tilk+t1,(int)(3*(-Vilk))+yukseklik/2+10,ref+tilk+t1+t2,
									(int)(3*(-Vilk))+yukseklik/2+10);
			gBellek.drawLine(ref+tilk,(int)(3*Vilk)+yukseklik/2+10,ref+tilk,(int)(3*(-Vilk))+yukseklik/2+10);
			gBellek.drawLine(ref+tilk+t1,(int)(3*Vilk)+yukseklik/2+10,ref+tilk+t1,(int)(3*(-Vilk))+yukseklik/2+10);
			gBellek.drawLine(ref+tilk+t1+t2,(int)(3*Vilk)+yukseklik/2+10,ref+tilk+t1+t2,(int)(3*(-Vilk))+yukseklik/2+10);
			
			gBellek.setColor(Color.lightGray);
			gBellek.drawLine(ref+tilk,(int)(-3*Vmaks)+yukseklik/2+10,ref+tilk,(int)(-3*betaVmaks)+yukseklik/6+10);
			gBellek.drawLine(ref+tilk+t1,(int)(-3*Vmaks)+yukseklik/2+10,ref+tilk+t1,(int)(3*betaVmaks)+yukseklik/6+10);
			gBellek.drawLine(ref+tilk+t1+t2,(int)(-3*Vmaks)+yukseklik/2+10,ref+tilk+t1+t2,(int)(-3*betaVmaks)+yukseklik/6+10);
			
			ref += peryod;
		}
		ref=16;
		
		//imza
		gBellek.setFont(new Font("Courier",Font.ITALIC,14));
		gBellek.setColor(Color.red);
		gBellek.drawString("H.G.",genislik-50,20);
		
		gBellek.setFont(new Font("TimesRoman",Font.PLAIN,16));
		g.drawImage(ekranDisiResim,0,0,this);
	}
	
	public void update(Graphics g){
		paint(g);
	}
	
	public Dimension getPreferredSize(){
		return new Dimension(380,450);
	}
}

class Opamp extends Panel{
	int yukseklik, genislik;
	int Vmax=10;
	int op_gen = 100, op_yuk = 100, xfark, yfark;
	double R1 = 10, R2 = 10, R=10, C=10;
	
	Font gecerliFont;
	CizimAlani cizimAlani;
	
	DirencDialog Rdirenci  = new DirencDialog(this,"R");
	DirencDialog R1direnci = new DirencDialog(this, "R1");
	DirencDialog R2direnci = new DirencDialog(this, "R2");
	DirencDialog Ckap	= new DirencDialog(this,"C");		
	
	Image ekranDisiResim;
	Graphics gBellek;
	
	public Opamp(String renk, CizimAlani cizimAlani){
		setBackground(Color.decode("#"+renk));
		setLayout(new BorderLayout());
		
		this.cizimAlani = cizimAlani;
		   
		addMouseListener(new MouseAdapter(){
			public void mousePressed(MouseEvent olay){	
				if(olay.getX() >= xfark+op_gen+15 && olay.getX() <= xfark+op_gen+35 && olay.getY() >= yfark+op_yuk+95
				   && olay.getY() <= yfark+op_yuk+155){
					Point konum = Opamp.this.getLocationOnScreen();
						R1direnci.addWindowListener(new WindowAdapter(){
							public void windowClosing(WindowEvent olay){
								R1direnci.dispose();
							}
						});
					R1direnci.setLocation(konum.x+xfark-30,konum.y+yfark+op_yuk+50);
					R1direnci.show();
					R1direnci.pack();
					R1direnci.setResizable(false);
				}
				
				if(olay.getX() >= xfark+op_gen+15 && olay.getX() <= xfark+op_gen+35 && olay.getY() >= yfark+op_yuk/2+25
				   && olay.getY() <= yfark+op_yuk/2+85){
					Point konum = Opamp.this.getLocationOnScreen();
						R2direnci.addWindowListener(new WindowAdapter(){
							public void windowClosing(WindowEvent olay){
								R2direnci.dispose();
							}
						});
					R2direnci.setLocation(konum.x+xfark-30,konum.y+yfark+op_yuk+50);
					R2direnci.show();
					R2direnci.pack();
					R2direnci.setResizable(false);
				}
				
				if(olay.getX() >= xfark+op_gen/2-5 && olay.getX() <= xfark+op_gen/2+50
					&& olay.getY() >= yfark-60 && olay.getY() <= yfark-40)
				{
					Point konum = Opamp.this.getLocationOnScreen();
						Rdirenci.addWindowListener(new WindowAdapter(){
							public void windowClosing(WindowEvent olay){
								Rdirenci.dispose();
							}
						});
					Rdirenci.setLocation(konum.x+xfark+op_gen/2,konum.y+yfark+op_yuk+30);
					Rdirenci.show();
					Rdirenci.pack();
					Rdirenci.setResizable(false);
				}
				
				if(olay.getX() >= xfark-95 && olay.getX() <= xfark-65
					&& olay.getY() >= yfark+50 && olay.getY() <= yfark+55)
				{
					Point konum = Opamp.this.getLocationOnScreen();
						Ckap.addWindowListener(new WindowAdapter(){
							public void windowClosing(WindowEvent olay){
								Ckap.dispose();
							}
						});
					Ckap.setLocation(konum.x+xfark-65,konum.y+yfark+55);
					Ckap.show();
					Ckap.pack();
					Ckap.setResizable(false);
				}
			}
			
		});
		addMouseMotionListener(new MouseMotionListener(){
			public void mouseMoved(MouseEvent olay){
				if((olay.getX() >= xfark+op_gen+15 && olay.getX() <= xfark+op_gen+35 && olay.getY() >= yfark+op_yuk+95
				   && olay.getY() <= yfark+op_yuk+155) || (olay.getX() >= xfark+op_gen/2-5 && olay.getX() <= xfark+op_gen/2+50
					&& olay.getY() >= yfark-60 && olay.getY() <= yfark-40) || (olay.getX() >= xfark+op_gen+15 && olay.getX() <= xfark+op_gen+35 && olay.getY() >= yfark+op_yuk/2+25
				   && olay.getY() <= yfark+op_yuk/2+85) || (olay.getX() >= xfark-95 && olay.getX() <= xfark-65
					&& olay.getY() >= yfark+50 && olay.getY() <= yfark+55))
				{
					setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
				}
				else setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
			}
			public void mouseDragged(MouseEvent olay){
			}
		});   
	}
	

	
	public void guncelle(double direncDegeri, String direnc){
		if(direnc == "R1") this.R1 = direncDegeri;
		else if(direnc == "R2") this.R2 = direncDegeri;
		else if(direnc == "R") this.R = direncDegeri;
		else if(direnc == "C") this.C = direncDegeri;
		
		cizimAlani.guncelle(R1*1000,R2*1000,R*1000, C*(1E-6));
		repaint();
	}
	
	public Insets getInsets(){
		return new Insets(10,10,10,10);
	}
	
	public void paint(Graphics g){
		yukseklik = this.getSize().height;
		genislik = this.getSize().width;
		ekranDisiResim = createImage(genislik, yukseklik);
		gBellek = ekranDisiResim.getGraphics();
		
		gecerliFont = gBellek.getFont();
		gBellek.setFont(gecerliFont);
		xfark = (genislik-op_gen)/2;
		yfark = 150;
		
		//üç boyut etkisi kazandırılıyor
		gBellek.setColor(Color.white);
		gBellek.draw3DRect(0,0,genislik-1,yukseklik-1,true);
		gBellek.draw3DRect(1,1,genislik-2,yukseklik-2,true);
		gBellek.draw3DRect(2,2,genislik-3,yukseklik-3,true);
		gBellek.draw3DRect(2,2,genislik-4,yukseklik-4,true);
		gBellek.draw3DRect(2,2,genislik-5,yukseklik-5,true);
		
		gBellek.setColor(Color.blue);
		gBellek.setFont(new Font("TimesRoman",Font.PLAIN,16));
		gBellek.drawString("Astable Multivibratör",80,20);
		
		gBellek.setFont(gecerliFont);
		gBellek.setColor(Color.black);
		                   
		//opamp çiziliyor
		gBellek.drawLine(xfark,yfark,xfark,yfark+op_yuk);
		gBellek.drawLine(xfark,yfark,
								 xfark+op_gen,yfark+op_yuk/2);
		gBellek.drawLine(xfark,yfark+op_yuk,
								 xfark+op_gen,yfark+op_yuk/2);
		
		gBellek.drawLine(xfark-80,yfark+20,xfark,yfark+20);
		gBellek.drawLine(xfark-20,yfark+op_yuk-20,xfark,yfark+op_yuk-20);
		gBellek.drawLine(xfark-20,yfark+op_yuk-20,xfark-20,yfark+op_yuk+70);
		gBellek.drawLine(xfark-20,yfark+op_yuk+70,xfark+op_gen+25,yfark+op_yuk+70);
		gBellek.drawLine(xfark+op_gen+25,yfark+op_yuk/2,xfark+op_gen+25,yfark+op_yuk/2+25);
		gBellek.drawLine(xfark+op_gen+25,yfark+op_yuk/2+85,xfark+op_gen+25,yfark+op_yuk+95);
		gBellek.drawLine(xfark+op_gen+25,yfark+op_yuk+155,xfark+op_gen+25,yfark+op_yuk+180);
        //toprak
		gBellek.drawLine(xfark+op_gen+16,yfark+op_yuk+180,xfark+op_gen+34,yfark+op_yuk+180);
        gBellek.drawLine(xfark+op_gen+19,yfark+op_yuk+183,xfark+op_gen+31,yfark+op_yuk+183);
        gBellek.drawLine(xfark+op_gen+22,yfark+op_yuk+186,xfark+op_gen+28,yfark+op_yuk+186);

		gBellek.drawLine(xfark+op_gen,yfark+op_yuk/2,
								 xfark+op_gen+75,yfark+op_yuk/2);
		gBellek.drawLine(xfark-25,yfark+20,xfark-25,yfark-50);
		gBellek.drawLine(xfark+op_gen/3-5,yfark-50,xfark-25,yfark-50);
		gBellek.drawLine(xfark+op_gen/3+55,yfark-50,xfark+op_gen+25,yfark-50);
		gBellek.drawLine(xfark+op_gen+25,yfark+op_yuk/2,xfark+op_gen+25,yfark-50);
		
		gBellek.drawOval(xfark+op_gen+75,yfark+op_yuk/2-5,10,10);
        gBellek.fillOval(xfark-30,yfark+15,10,10);
		gBellek.fillOval(xfark+op_gen+20,yfark+op_yuk+65,10,10);
		gBellek.fillOval(xfark+op_gen+20,yfark+op_yuk/2-5,10,10);
		
		gBellek.setFont(new Font("TimesRoman",Font.BOLD,24));
		gBellek.drawString("_",xfark+5,yfark+20);
		gBellek.drawString("+",xfark+5,yfark+op_yuk-15);
		
		gBellek.setFont(gecerliFont);
		gBellek.setColor(Color.decode("#007846"));
		
	//	gBellek.setColor(Color.red);
	//	gBellek.drawString("Vçıkış= "+Integer.toString(Vmax),xfark+op_gen+25,yfark+op_yuk/2-10);
		
		// R1 çiziliyor
		gBellek.setColor(Color.black);
	    gBellek.drawString("R1 = "+Double.toString(R1)+"k",xfark+op_gen-30,yfark+op_yuk+120);
		gBellek.drawLine(xfark+op_gen+25,yfark+op_yuk+95,xfark+op_gen+35,yfark+op_yuk+100);
		gBellek.drawLine(xfark+op_gen+35,yfark+op_yuk+100,xfark+op_gen+15,yfark+op_yuk+110);
		gBellek.drawLine(xfark+op_gen+15,yfark+op_yuk+110,xfark+op_gen+35,yfark+op_yuk+120);
		gBellek.drawLine(xfark+op_gen+35,yfark+op_yuk+120,xfark+op_gen+15,yfark+op_yuk+130);
		gBellek.drawLine(xfark+op_gen+15,yfark+op_yuk+130,xfark+op_gen+35,yfark+op_yuk+140);
		gBellek.drawLine(xfark+op_gen+35,yfark+op_yuk+140,xfark+op_gen+15,yfark+op_yuk+150);
		gBellek.drawLine(xfark+op_gen+15,yfark+op_yuk+150,xfark+op_gen+25,yfark+op_yuk+155);
		    
			
        // R2 çiziliyor
		gBellek.setColor(Color.black);
		gBellek.drawString("R2 = "+Double.toString(R2)+"k",xfark+op_gen-30,yfark+op_yuk/2+50);
		gBellek.drawLine(xfark+op_gen+25,yfark+op_yuk/2+25,xfark+op_gen+35,yfark+op_yuk/2+30);
		gBellek.drawLine(xfark+op_gen+35,yfark+op_yuk/2+30,xfark+op_gen+15,yfark+op_yuk/2+40);
		gBellek.drawLine(xfark+op_gen+15,yfark+op_yuk/2+40,xfark+op_gen+35,yfark+op_yuk/2+50);
		gBellek.drawLine(xfark+op_gen+35,yfark+op_yuk/2+50,xfark+op_gen+15,yfark+op_yuk/2+60);
		gBellek.drawLine(xfark+op_gen+15,yfark+op_yuk/2+60,xfark+op_gen+35,yfark+op_yuk/2+70);
		gBellek.drawLine(xfark+op_gen+35,yfark+op_yuk/2+70,xfark+op_gen+15,yfark+op_yuk/2+80);
		gBellek.drawLine(xfark+op_gen+15,yfark+op_yuk/2+80,xfark+op_gen+25,yfark+op_yuk/2+85);
                 
		// R çiziliyor
		gBellek.drawString("R = "+Double.toString(R)+"k",xfark+op_gen/3,yfark-30);
		gBellek.drawLine(xfark+op_gen/3-5,yfark-50,xfark+op_gen/3,yfark-60);
		gBellek.drawLine(xfark+op_gen/3,yfark-60,xfark+op_gen/3+10,yfark-40);
		gBellek.drawLine(xfark+op_gen/3+10,yfark-40,xfark+op_gen/3+20,yfark-60);
		gBellek.drawLine(xfark+op_gen/3+20,yfark-60,xfark+op_gen/3+30,yfark-40);
		gBellek.drawLine(xfark+op_gen/3+30,yfark-40,xfark+op_gen/3+40,yfark-60);
		gBellek.drawLine(xfark+op_gen/3+40,yfark-60,xfark+op_gen/3+50,yfark-40);
		gBellek.drawLine(xfark+op_gen/3+50,yfark-40,xfark+op_gen/3+55,yfark-50);
		
		//C çiziliyor
		gBellek.drawString("C = "+Double.toString(C)+"uF",xfark-70,yfark+50);
		gBellek.drawLine(xfark-80,yfark+20,xfark-80,yfark+50);
		gBellek.drawLine(xfark-95,yfark+50,xfark-65,yfark+50);
		gBellek.drawLine(xfark-95,yfark+55,xfark-65,yfark+55);
        gBellek.drawLine(xfark-80,yfark+55,xfark-80,yfark+80);
		gBellek.drawLine(xfark-89,yfark+80,xfark-71,yfark+80);
		gBellek.drawLine(xfark-86,yfark+83,xfark-74,yfark+83);
		gBellek.drawLine(xfark-83,yfark+86,xfark-77,yfark+86);
				
		g.drawImage(ekranDisiResim,0,0,this);
	}
	
	public void update(Graphics g){
		paint(g);
	}
	
	public Dimension getPreferredSize(){
		return new Dimension(300,450);
	}
}

class DirencDialog extends Frame implements ActionListener{
	double direnc_double;
	int direnc_int, uzunluk;
	boolean focus = false;
	Double direncDouble;
	String dizi = new String();
	Opamp opamp;
	TextField metinKutusu = new TextField(3);
	Label baslik;
	Panel butun = new Panel();
	String yeniayarla = new String("");
	String direnc;
	
	public DirencDialog(Opamp opamp, String direnc) {
	//	super(getFrame(aplet),"RC");
		this.direnc = direnc;
		setTitle(direnc);
		baslik = new Label(direnc + "= ");
		this.opamp=opamp;
		setBackground(Color.white);
		setLayout(new BorderLayout());
		
		metinKutusu.addActionListener(this);
		butun.setLayout(new FlowLayout(FlowLayout.LEFT));
		butun.add(baslik);
		butun.add(metinKutusu);
		add(butun,"Center");
	}
	
	public void actionPerformed(ActionEvent olay){
		TextField alan = (TextField)olay.getSource();
		dizi = alan.getText();
		uzunluk = dizi.length();
		for(int i=0;i<uzunluk;i++){
			if(dizi.charAt(i) != '0' && dizi.charAt(i) != '1' && dizi.charAt(i) != '2' && 
			   dizi.charAt(i) != '3' && dizi.charAt(i) != '4' && dizi.charAt(i) != '5' && 
			   dizi.charAt(i) != '6' && dizi.charAt(i) != '7' && dizi.charAt(i) != '8' && 
			   dizi.charAt(i) != '9'){
				focus = true;
			}
			else focus = false;
		}
		if(!focus){								
			direncDouble = Double.valueOf(alan.getText());
			direnc_double = direncDouble.doubleValue();
			direnc_int = (int)direnc_double;
			
			if(direnc_double > 0){
				alan.setText(yeniayarla);
				dispose();
				opamp.guncelle(direnc_double, direnc);
			}
			
			else if(direnc_double == 0){
				alan.requestFocus();
				alan.selectAll();
			}
		}
		
		else if(focus){
			alan.requestFocus();
			alan.selectAll();
		}
	}
	
	static Frame getFrame(Component c) {
		Frame     frame = null;

        while((c = c.getParent()) != null) {
            if(c instanceof Frame)
                frame = (Frame)c;
        }
        return frame;
    }
	
	public Dimension getPreferredSize(){
		return new Dimension(110,80);
	}	
}
