import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/* Disegno
  Autore: Pietro Frasca, Maggio 2002-10-30
*/

// interfaccia da implementare nella classe Grafico1
interface Grafici {
  public void quadrato(int centroX, int centroY, int lato, Graphics g);
  public void rombo (int centroX, int centroY, int diagonale, Graphics g);
  public void cerchio (int centroX, int centroY, int raggio, Graphics g);
  public void figura (int centroX, int centroY, int lung, Graphics g);
}

class Disegno extends JPanel implements Grafici{
/* in questa classe sono implementati i metodi dell'interfaccia Grafici. */

  public void quadrato(int centroX, int centroY, int lato, Graphics g){
    g.drawRect(centroX-lato/2,centroY-lato/2,lato,lato);
  }
  public void rombo (int centroX, int centroY, int diagonale, Graphics g){
    /* il rombo si puņ ottenere mediante quattro linee (di Graphics o Graphics2D) 
    * oppure usando l'oggetto Polygon
    */
    g.drawLine(centroX-diagonale/2,centroY,centroX,centroY-diagonale/2);
    g.drawLine(centroX,centroY-diagonale/2,centroX+diagonale/2,centroY);
    g.drawLine(centroX+diagonale/2,centroY,centroX,centroY+diagonale/2);
    g.drawLine(centroX,centroY+diagonale/2,centroX-diagonale/2,centroY);
  }
  public void cerchio (int centroX, int centroY, int raggio, Graphics g){
    /* il cerchio si puņ ottenere con il metodo drawOval (usando Graphics)
    * oppure con i metodi e gli oggetti di Graphics2D. E' necessario fare
    * una semplice traslazione del punto di origine. Notare che il raggio
    * va moltiplicato per 2
    */
        
  	g.drawOval(centroX-raggio,centroY-raggio,raggio*2,raggio*2);
  }
  public void figura (int centroX, int centroY, int lung, Graphics g){
    /* per disegnare la figura basta richiamare i metodi relativi
    * alle figure che la compongono passando loro i giusti parametri.
    * notare il valore del raggio del cerchio che deve essere lung/2.
   */
    quadrato(centroX,centroY,lung,g);
    cerchio(centroX,centroY,lung/2,g);
    rombo(centroX,centroY,lung,g);    
  }
  
  public void paintComponent(Graphics g){
    /* il metodo paintComponent viene richiamato automaticamente
    * all'apertura del frame e ogni volta che lo si ridemnsiona.
    */
    super.paintComponent(g); 
    setBackground(Color.white); // rende lo sfondo bianco 
    g.setColor(Color.green); // 
    quadrato(150,200,100,g);
    g.setColor(new Color(100,20,30));
    rombo(300,200,100,g);
    g.setColor (new Color(0.87f,0.2312f,0.678f));
    cerchio(450,200,50,g);    
    g.setColor(Color.blue);
    figura(300,200,130,g);
  }
 
}

public class TestDisegno {
  public static void main(String[] args){
    /* crea oggetto mioFrame */
    JFrame mioFrame=new JFrame();
    /* titolo del  frame */
    mioFrame.setTitle("Test n.4"); 
    /* dimensiona il frame */
    mioFrame.setSize(600,400); 
    /* pannello del contenuto di mioFrame */
    Container contenuto=mioFrame.getContentPane(); 
    /* crea oggetto gr1 */ 
    Disegno gr1 =new Disegno(); 
    /* aggiunge il pannello gr1 al pannello del contenuto di mioFrame */ 
    contenuto.add(gr1); 
    /* visualizza il frame */  
    mioFrame.show(); 
   
  }
}
