//MaestroG.java

//import java.awt.*;
//import java.lang.*;

import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;

public class MaestroG{
    //MaestroG(){}
   
    //tipo=1 arrow up
    //
    public static final void drawArrow(int x, int y, int tipo, Graphics g){
	Graphics2D g2d = (Graphics2D)g; 
        switch (tipo){
	   case 1://ArrowUp
	  	g.drawLine(x,y,x,y-8);
		g.drawLine(x-3,y-2,x+3,y-2);
		g.drawLine(x-2,y-3,x+2,y-3);
		g.drawLine(x-2,y-4,x+2,y-4);
		g.drawLine(x-1,y-5,x+1,y-5);
		g.drawLine(x-1,y-6,x+1,y-6);
	   break;
	   case 2://Down
		g.drawLine(x,y,x,y+8);
		g.drawLine(x-1,y+6,x+1,y+6);
		g.drawLine(x-1,y+5,x+1,y+5);
		g.drawLine(x-2,y+4,x+2,y+4);
		g.drawLine(x-2,y+3,x+2,y+3);
		g.drawLine(x-3,y+2,x+3,y+2);
	   break;
	   case 3://ArrowRight
		g.drawLine(x,y,x+8,y);
		g.drawLine(x+6,y-1,x+6,y+1);
		g.drawLine(x+5,y-1,x+5,y+1);
		g.drawLine(x+4,y-2,x+4,y+2);
		g.drawLine(x+3,y-2,x+3,y+2);
		g.drawLine(x+2,y-3,x+2,y+3);
	   break;
	   case 4://ArrowLeft
		g.drawLine(x,y,x-8,y);
		g.drawLine(x-2,y-3,x-2,y+3);
		g.drawLine(x-3,y-2,x-3,y+2);
		g.drawLine(x-4,y-2,x-4,y+2);
		g.drawLine(x-5,y-1,x-5,y+1);
		g.drawLine(x-6,y-1,x-6,y+1); 
	  break;
          
          case 5://ArrowUpSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                g.drawLine(x,y,x,y-8);
		//draw oblique arrow head
		Polygon pH = new Polygon();
		pH.addPoint(x-2, y-2);
		pH.addPoint(x+2, y-2);
		pH.addPoint(x,y-8);
		g.drawPolygon(pH);
		g.fillPolygon(pH);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
        
          break;
          
          case 6://ArrowDownSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                g.drawLine(x,y,x,y+8);
		//draw oblique arrow head
		Polygon pJ = new Polygon();
		pJ.addPoint(x-2, y+2);
		pJ.addPoint(x+2, y+2);
		pJ.addPoint(x,y+8);
		g.drawPolygon(pJ);
		g.fillPolygon(pJ);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
	   break;
           
           case 7://ArrowRightSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                g.drawLine(x,y,x+8,y);
		//draw oblique arrow head
		Polygon pK = new Polygon();
		pK.addPoint(x+2, y-2);
		pK.addPoint(x+2, y+2);
		pK.addPoint(x+8,y);
		g.drawPolygon(pK);
		g.fillPolygon(pK);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
	   
	   break;
           
           case 8://ArrowLeftSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                g.drawLine(x,y,x-8,y);
		//draw oblique arrow head
		Polygon pL = new Polygon();
		pL.addPoint(x-2, y-2);
		pL.addPoint(x-2, y+2);
		pL.addPoint(x-8,y);
		g.drawPolygon(pL);
		g.fillPolygon(pL);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
 
	   break;
           
           case 9://ArrowOblique 45 degrees NE
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
		//draw oblique arrow head
		Polygon pM = new Polygon();
                //draw oblique arrow head
                
                //pM.addPoint(x+6,y-6);
		//pM.addPoint(x-2,y-2);
		//pM.addPoint(x+2,y+2);
                
		pM.addPoint(x+5,y-5);
		pM.addPoint(x-1,y-2);
		pM.addPoint(x+2,y+1);
		
                g.drawPolygon(pM);
		g.fillPolygon(pM);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
                 
           break;
           
           case 10://ArrowOblique 45 degrees SW
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
		//draw oblique arrow head
		Polygon pX = new Polygon();
                //draw oblique arrow head
                
                pX.addPoint(x-5,y+5);
		pX.addPoint(x+1,y+2);
		pX.addPoint(x-2,y-1);
		
                g.drawPolygon(pX);
		g.fillPolygon(pX);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
                 
           break;
	}	
	
    }  
    
    public static final void drawArrowScaled(int x, int y, int tipo, double sfactor, Graphics g){
	Graphics2D g2d = (Graphics2D)g;
        double s;
        s = sfactor;
        
        switch (tipo){
	   
          case 1://ArrowUpSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                g.drawLine(x,y-1,x,y+(int)(s*5));
		//draw oblique arrow head
		Polygon pH = new Polygon();
		pH.addPoint(x-(int)(s*2), y-(int)(s*2));
		pH.addPoint(x+(int)(s*2), y-(int)(s*2));
		pH.addPoint(x,y-(int)(s*7));
		g.drawPolygon(pH);
		g.fillPolygon(pH);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
        
          break;
          
          case 2://ArrowDownSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                g.drawLine(x,y+1,x,y-(int)(s*5));
		//draw oblique arrow head
		Polygon pJ = new Polygon();
		pJ.addPoint(x-(int)(s*2), y+(int)(s*2));
		pJ.addPoint(x+(int)(s*2), y+(int)(s*2));
		pJ.addPoint(x,y+(int)(s*7));
		g.drawPolygon(pJ);
		g.fillPolygon(pJ);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
	   break;
           
           case 3://ArrowRightSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                g.drawLine(x+1,y,x-(int)(s*5),y);
		//draw oblique arrow head
		Polygon pK = new Polygon();
		pK.addPoint(x+(int)(s*2), y-(int)(s*2));
		pK.addPoint(x+(int)(s*2), y+(int)(s*2));
		pK.addPoint(x+(int)(s*7),y);
		g.drawPolygon(pK);
		g.fillPolygon(pK);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
	   
	   break;
           
           case 4://ArrowLeftSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                g.drawLine(x-1,y,x+(int)(s*5),y);
		//draw oblique arrow head
		Polygon pL = new Polygon();
		pL.addPoint(x-(int)(s*2), y-(int)(s*2));
		pL.addPoint(x-(int)(s*2), y+(int)(s*2));
		pL.addPoint(x-(int)(s*7),y);
		g.drawPolygon(pL);
		g.fillPolygon(pL);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
 
	   break;
           
           case 5://ArrowOblique 45 degrees NE
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
		//draw oblique arrow head
		Polygon pM = new Polygon();
                
                //pM.addPoint(x+(int)(s*5),y-(int)(s*5)); // longer arrow
		pM.addPoint(x+(int)(s*4),y-(int)(s*4));
		pM.addPoint(x-(int)(s*1),y-(int)(s*2));
		pM.addPoint(x+(int)(s*2),y+(int)(s*1));
		
                g.drawPolygon(pM);
		g.fillPolygon(pM);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
                 
           break;
           
           case 7://Larger ArrowRightSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                Polygon pR = new Polygon();
		pR.addPoint(x, y-(int)(s*3));
		pR.addPoint(x, y+(int)(s*3));
		pR.addPoint(x+(int)(s*7),y);
		g.drawPolygon(pR);
		g.fillPolygon(pR);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
	   
	   break;
           
           case 8://Larger ArrowLeftSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                Polygon pS = new Polygon();
		pS.addPoint(x, y-(int)(s*3));
		pS.addPoint(x, y+(int)(s*3));
		pS.addPoint(x-(int)(s*7),y);
		g.drawPolygon(pS);
		g.fillPolygon(pS);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
 
	   break;
           
           case 9://ArrowUpSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                Polygon pU = new Polygon();
		pU.addPoint(x-(int)(s*3), y);
		pU.addPoint(x+(int)(s*3), y);
		pU.addPoint(x,y-(int)(s*7));
		g.drawPolygon(pU);
		g.fillPolygon(pU);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
        
          break;
          
          case 10://ArrowDownSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                Polygon pD = new Polygon();
                pD.addPoint(x-(int)(s*3), y);
		pD.addPoint(x+(int)(s*3), y);
		pD.addPoint(x,y+(int)(s*7));
		g.drawPolygon(pD);
		g.fillPolygon(pD);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
	   break;
	}		
    }
    
    
    public static final void drawArrowtip(int x, int y, int tipo, Graphics g){
	 switch (tipo){
	   case 1://ArrowUp
	  	g.drawLine(x,y-4,x,y-8);
		g.drawLine(x-3,y-2,x+3,y-2);
		g.drawLine(x-2,y-3,x+2,y-3);
		g.drawLine(x-2,y-4,x+2,y-4);
		g.drawLine(x-1,y-5,x+1,y-5);
		g.drawLine(x-1,y-6,x+1,y-6);
	   break;
	   case 2://Down
		g.drawLine(x,y+4,x,y+8);
		g.drawLine(x-1,y+6,x+1,y+6);
		g.drawLine(x-1,y+5,x+1,y+5);
		g.drawLine(x-2,y+4,x+2,y+4);
		g.drawLine(x-2,y+3,x+2,y+3);
		g.drawLine(x-3,y+2,x+3,y+2);
	   break;
	   case 3://ArrowRight
		g.drawLine(x+4,y,x+8,y);
		g.drawLine(x+6,y-1,x+6,y+1);
		g.drawLine(x+5,y-1,x+5,y+1);
		g.drawLine(x+4,y-2,x+4,y+2);
		g.drawLine(x+3,y-2,x+3,y+2);
		g.drawLine(x+2,y-3,x+2,y+3);
	   break;
	   case 4://ArrowLeft
		g.drawLine(x-4,y,x-8,y);
		g.drawLine(x-2,y-3,x-2,y+3);
		g.drawLine(x-3,y-2,x-3,y+2);
		g.drawLine(x-4,y-2,x-4,y+2);
		g.drawLine(x-5,y-1,x-5,y+1);
		g.drawLine(x-6,y-1,x-6,y+1); 
	  break;
	}	
	
    }  
    
    public static void addComponent(Container container, Component component, int gridx, int gridy,
	int gridwidth, int gridheight, int fill, int anchor) throws AWTException{
	    LayoutManager lm = container.getLayout();
	    if(!(lm instanceof GridBagLayout)){
		throw new AWTException ("Invalid layout"+lm);
	    }
	    else{
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.gridx = gridx;
		gbc.gridy = gridy;
		gbc.gridwidth = gridwidth;
		gbc.gridheight = gridheight;
		gbc.fill = fill;
		gbc.anchor = anchor;
		((GridBagLayout)lm).setConstraints(component, gbc);
		container.add(component);
	    }
    }
    
    public static void  SansNosansSymb(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("Serif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str2,x,y);
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("Symbol",Font.PLAIN,fsize+2));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
    }

     public static void  SansNosansSymb2(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("Serif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str2,x,y);
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("Serif",Font.PLAIN,fsize+2));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
    }
     
    public static void  SansPLAIN(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize+1));
		fm = g.getFontMetrics();
		g.drawString(str2,x,y);
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }


    public static void TxtImgTxt(String str1, BufferedImage img, String str3, Graphics g, int fsize, int x, int y, ImageObserver observer){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		//g.setFont(new Font("SanSerif",Font.ITALIC,fsize+1));
		//fm = g.getFontMetrics();
		//g.drawString(str2,x,y);

		x = x + fm.stringWidth("  ");
		g.drawImage(img,x,y-img.getHeight(),observer);
		x = x + fm.stringWidth(" ") + img.getWidth() + 1;
		
		//x = x + fm.stringWidth(str2) + 1;
		//g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                //fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }

    public static void SupTxtImgTxt(String str1, String str2, BufferedImage img, String str3, Graphics g, int fsize, int x, int y, ImageObserver observer) {
	        FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
                
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str2,x,y);
                x = x + fm.stringWidth(str2) + 1;
		y = y + fm.getHeight()/3;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize+1));
		fm = g.getFontMetrics();

		x = x + fm.stringWidth("  ");
		g.drawImage(img,x,y-img.getHeight(),observer);
		x = x + fm.stringWidth(" ") + img.getWidth() + 1;
		
		g.drawString(str3,x,y);
    }
		
		    
    
    public static void  SansPLAINSuper(String str1, String str2, String str3, String str4, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
                
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
                
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str2,x,y);
                x = x + fm.stringWidth(str2) + 1;
		y = y + fm.getHeight()/3;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize+1));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
    }
    
    public static void  subscripter(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }
    
    public static void  subscripterS(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("Serif",Font.PLAIN,fsize+1));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }
    
    public static void  subsub(String str1, String str2, String str3, String str4, String str5, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
                fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str5,x,y);
              
    }
    
    public static void  subsubsup(String str1, String str2, String str3, String str4, String str5, String str6, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
                fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str5,x,y);
                
                x = x + fm.stringWidth(str5) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
                fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str6,x,y);
		
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		
    }
    
    public static void  subsubsubsubsup(String str1, String str2, String str3, String str4, String str5, String str6, 
                                     String str7, String str8, String str9, String str10, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
                fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str5,x,y);
                
                x = x + fm.stringWidth(str5) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
                fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str6,x,y);
		
                y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str6) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str7,x,y);
                
                x = x + fm.stringWidth(str7) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
                fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str8,x,y);
		
                y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str8) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str9,x,y);
                
                x = x + fm.stringWidth(str9) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
                fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str10,x,y);
		
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
    }
    
    public static void  subIsub(String str1, String str1b, String str2, String str3, String str4, String str5, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		
                g.setFont(new Font("Serif",Font.ITALIC,fsize+2));
		fm = g.getFontMetrics();
		g.drawString(str1b,x,y);
		x = x + fm.stringWidth(str1b) + 1;
		
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
                fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str5,x,y);
    }
    
    public static void  subscripterInfinityOne(String str1, String str2, String str3, String str4, Graphics g, int fsize, int x, int y){
        
		FontMetrics fm;
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
                
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
		
                //Change back to the actual symbol, but use extra-large font or infinity is too small
                //string str4 is not used
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize+6));
		fm = g.getFontMetrics();
                g.drawString("\u221e",x,y);
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
    }
    
    public static void  subscripterInfinityTwo(String str1, String str2, String str3, String str4, String str5, Graphics g, int fsize, int x, int y){
        
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
		//symbol for "infinity".
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize+6));
		
                fm = g.getFontMetrics();
                g.drawString("\u221e",x,y);
                
                x = x + fm.stringWidth("oo") + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
    }

 public static void  subscripterInfinityThree(String str1, String str2, String str3, String str4, Graphics g, int fsize, int x, int y){
        
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
                
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
		
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize+6));
		fm = g.getFontMetrics();
                g.drawString("\u221e",x,y);
                
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
    }

    public static void  subscripterLargerLast(String str1, String str2, String str3, String str4, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize+4));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
    }
    
    public static void  subscripterSymFirst(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("Serif",Font.PLAIN,fsize));
                g.setFont(new Font("Symbol",Font.PLAIN,fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }

    public static void  subscripterSymFirst2(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("Serif",Font.PLAIN,fsize+1));
                //g.setFont(new Font("Symbol",Font.PLAIN,fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }

    public static void  subscripterSymFirst2I(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("Serif",Font.ITALIC,fsize+1));
                //g.setFont(new Font("Symbol",Font.PLAIN,fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }
    
    public static void  subscripterSS(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("Serif",Font.PLAIN,fsize+2));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }
    
    public static void  subscripterSS2(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("Serif",Font.PLAIN,fsize+1));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }
    
    public static void  subscripterSS3(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("Serif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }
    
    public static void  subscripterSSym(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("Serif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("Serif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("Symbol",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }

    
     public static void  subscripterSanSym(String str1, String str2, String str3, String str4, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
                g.setFont(new Font("Serif",Font.PLAIN,fsize));
		g.setFont(new Font("Symbol",Font.PLAIN,fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
    }
    
    public static void  subscripterSanSym2(String str1, String str2, String str3, String str4, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
                g.setFont(new Font("Serif",Font.PLAIN,fsize+3));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
    }

    public static void  subscripterSanSym3(String str1, String str2, String str3, String str4, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
                g.setFont(new Font("Serif",Font.PLAIN,fsize+1));
		//g.setFont(new Font("Symbol",Font.PLAIN,fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
    }
    
    public static void  subscripterSymMiddle(String str1, String str2, String str3, String str4, String str5, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
                g.setFont(new Font("Serif",Font.PLAIN,fsize));
		g.setFont(new Font("Symbol",Font.PLAIN,fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
                x = x + fm.stringWidth(str4) + 1;
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str5,x,y);
                
    }
    
    public static void  subscripterSymMiddle2(String str1, String str2, String str3, String str4, String str5, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
                g.setFont(new Font("Serif",Font.PLAIN,fsize+1));
		//g.setFont(new Font("Symbol",Font.PLAIN,fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
                x = x + fm.stringWidth(str4) + 1;
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str5,x,y);
                
    }
     
    public static void  subscripterB(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.BOLD,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.BOLD,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.BOLD,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }
    
     
    public static void  superscripter(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }
    
    public static void superscripter2(String str0, String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
                g.setFont(new Font("Serif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str0,x,y);
		x = x + fm.stringWidth(str0) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }
    
    public static void superscripter2B(String str0, String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
                g.setFont(new Font("Serif",Font.BOLD,fsize));
		fm = g.getFontMetrics();
		g.drawString(str0,x,y);
		x = x + fm.stringWidth(str0) + 1;
		g.setFont(new Font("SanSerif",Font.BOLD,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.BOLD,fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.BOLD,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }
    
    public static void drawCircle(int x, int y, int radius, Graphics g){
                Graphics2D g2d = (Graphics2D)g;
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
		g.drawOval(x-radius/2,y-radius/2,radius,radius);
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
            
    }
    
    public static void fillCircle(int x, int y, int radius, Graphics g){
                Graphics2D g2d = (Graphics2D)g;
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
                g.fillOval(x-radius/2,y-radius/2,radius,radius);
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
            
    }    

    
    public static void drawArcThick(Graphics g, double xCenter, double yCenter, double Radius, double startangle, double endangle, int thick, Color color){
	
            Graphics2D g2d = (Graphics2D)g;
            g2d.setPaint(color);
            g2d.setStroke(new BasicStroke(thick));
        
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
            Arc2D.Double arc_one = new Arc2D.Double(xCenter,yCenter,Radius,Radius,startangle,endangle,0);
            g2d.draw(arc_one);
  
            g2d.setStroke(new BasicStroke(1));
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
        }
}

/*
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.net.*;
import java.awt.event.*;
import java.lang.*;


public class MaestroG{
    MaestroG(){};
    //tipo=1 arrow up
    //
    public static final void drawArrow(int x, int y, int tipo, Graphics g){
	 switch (tipo){
	   case 1://ArrowUp
	  	g.drawLine(x,y,x,y-8);
		g.drawLine(x-3,y-2,x+3,y-2);
		g.drawLine(x-2,y-3,x+2,y-3);
		g.drawLine(x-2,y-4,x+2,y-4);
		g.drawLine(x-1,y-5,x+1,y-5);
		g.drawLine(x-1,y-6,x+1,y-6);
	   break;
	   case 2://Down
		g.drawLine(x,y,x,y+8);
		g.drawLine(x-1,y+6,x+1,y+6);
		g.drawLine(x-1,y+5,x+1,y+5);
		g.drawLine(x-2,y+4,x+2,y+4);
		g.drawLine(x-2,y+3,x+2,y+3);
		g.drawLine(x-3,y+2,x+3,y+2);
	   break;
	   case 3://ArrowRight
		g.drawLine(x,y,x+8,y);
		g.drawLine(x+6,y-1,x+6,y+1);
		g.drawLine(x+5,y-1,x+5,y+1);
		g.drawLine(x+4,y-2,x+4,y+2);
		g.drawLine(x+3,y-2,x+3,y+2);
		g.drawLine(x+2,y-3,x+2,y+3);
	   break;
	   case 4://ArrowLeft
		g.drawLine(x,y,x-8,y);
		g.drawLine(x-2,y-3,x-2,y+3);
		g.drawLine(x-3,y-2,x-3,y+2);
		g.drawLine(x-4,y-2,x-4,y+2);
		g.drawLine(x-5,y-1,x-5,y+1);
		g.drawLine(x-6,y-1,x-6,y+1); 
	  break;
	}	
	
    }  
    
    public static void addComponent(Container container, Component component, int gridx, int gridy,
	int gridwidth, int gridheight, int fill, int anchor) throws AWTException{
	    LayoutManager lm = container.getLayout();
	    if(!(lm instanceof GridBagLayout)){
		throw new AWTException ("Invalid layout"+lm);
	    }
	    else{
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.gridx = gridx;
		gbc.gridy = gridy;
		gbc.gridwidth = gridwidth;
		gbc.gridheight = gridheight;
		gbc.fill = fill;
		gbc.anchor = anchor;
		((GridBagLayout)lm).setConstraints(component, gbc);
		container.add(component);
	    }
    }
    
  
    public static void  subscripter(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		g.drawString(str3,x,y);
    }
    
     
    public static void  superscripter(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		g.drawString(str3,x,y);
    } 
    
    public static void drawCircle(int x, int y, int radius, Graphics g){
		g.drawOval(x-radius/2,y-radius/2,radius,radius);
    }
    
    public static void fillCircle(int x, int y, int radius, Graphics g){
		g.fillOval(x-radius/2,y-radius/2,radius,radius);
    }   
    
    public static void drawArcThick(Graphics g, double xCenter, double yCenter, double Radius, double startangle, double endangle, int thick, Color color){
	
            Graphics2D g2d = (Graphics2D)g;
            g2d.setPaint(color);
            g2d.setStroke(new BasicStroke(thick));
        
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
            Arc2D.Double arc_one = new Arc2D.Double(xCenter,yCenter,Radius,Radius,startangle,endangle,0);
            g2d.draw(arc_one);
  
            g2d.setStroke(new BasicStroke(1));
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
    }

}*/
