
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Font;
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Graphics;


// Se declara la clase Grafico que hereda de MIDlet
public class Grafico extends MIDlet implements CommandListener {
  
  private Display pantalla; // se declara un objeto Display
  private Command exit = new Command("Salir", Command.SCREEN, 1); // Se crea un comando para salir
  private lienzo L; // Se declara lienzo como un area para dibujar
  
  public Grafico() // Constructor del MIDlet
  {
    pantalla = Display.getDisplay(this); // Se crea el objeto pantalla como Display
    L=new lienzo(); // Se crea el objeto L como lienzo
    L.addCommand(exit); // Se agrega el comando exit, vinculandolo al lienzo
    L.setCommandListener(this); //Se ajusta el escuchador de eventos vinculado al lienzo
  }

  // Metodo que se ejecuta al iniciar el MIDlet
  public void startApp() {
    pantalla.setCurrent(L); // En la pantalla se depliega el lienzo
  }
  // Metodo que se ejecuta al pausar el MIDlet
  public void pauseApp() {  
  }

  // Metodo para destruir el MIDlet
  public void destroyApp(boolean unconditional) { 
  }

  // Este metodo se ejecuta cuando se acciona la orden salir (exit) en el dispositivo
  public void commandAction(Command command, Displayable displayable) {
   if (command == exit) {
      destroyApp(false);
      notifyDestroyed();
    }
  }

}

  // Esta clase contiene el metodo paint. Este metodo, modifica el contenido grafico del lienzo. 
  // Notese como la clase hereda de la clase Canvas.

  class lienzo extends Canvas
  {
    /* En este metodo paint, se utilizan las primitivas de graficos */
    
    public void paint(Graphics g)
    {
      int  Rx=getWidth(); // Obtiene el largo en X de la pantalla

      int  Ry=getHeight();   // Obtiene el largo en Y de la pantalla

      g.setColor(0x000000);  // Ajusta color negro

      g.fillRect(0,0,Rx-1,Ry-1); // Dibuja un rectangulo relleno de color negro como fondo de pantalla

      g.setColor(0x0000ff);      // Ajusta color azul

      g.fillRect(Rx/3,Ry/3,Rx/3,Ry/3); // Dibuja un rectangulo relleno de color azul

      g.setColor(0x00ff00); //Ajusta color verde

      g.fillArc(0,0,Rx/2,Ry/2,0,360); // Dibuja un arco de 0 a 360 grados en verde

      g.setColor(0xff0000); // Ajusta color rojo

      g.fillRoundRect(Rx/4,Ry/4,Rx/4,Ry/4,Rx/6,Ry/6); //Dibuja un rectangulo rrelleno de puntas redondas en rojo
      
      g.setColor(0xffffff); // Ajusta color a blanco

      g.drawLine(0,0,Rx-1,Ry-1); // Dibuja una linea blanca

      g.drawRect(Rx/10,Ry/10,Rx*8/10,Ry*8/10); // Dibuja un rectangulo blanco

      g.drawRoundRect(Rx/8,Ry/8,Rx*6/8,Ry*6/8,Rx/10,Ry/10); // Dibuja un rectangulo blanco

      g.drawArc(Rx/12,Ry/12,Rx*10/12,Ry*10/12,0,360); // Dibuja un arco de 0 a 360 blanco   
     
      // Define una fuente de texto
      Font fuente = Font.getFont (Font.FACE_PROPORTIONAL, Font.STYLE_BOLD, Font.SIZE_LARGE);

      // Ajusta fuente
      g.setFont(fuente);

      // Ajusta color de fuente
      g.setColor(0xffffff);

      // Dibuja una cadena con el color y fuente ajustados. 
      g.drawString(""+Rx+"x"+Ry,Rx/2,Ry/2,Graphics.BASELINE|Graphics.HCENTER);
   
    }
     
  }

