viernes, 24 de febrero de 2012

Ejemplo sobre interfaces

Código 1: PoligonoRegular.java

public abstract class PoligonoRegular {
    protected int numLados;
    protected double lado; // longitud de un lado

    public PoligonoRegular(int numLados, double lado) {
        this.numLados = numLados;
        this.lado = lado;
    }

    public double perimetro() {
        return numLados*lado;
    }

    // este método lo tiene que hacer cada clase derivada;
    // depende de cada polígono regular
    public abstract double area();
}

_______________________________________________________________________
Código 2: cuadrado.java

import java.awt.*;

public class Cuadrado extends PoligonoRegular implements Pintador {

     public Cuadrado(double lado) {
        super(4,lado); // constructora de PolígonoRegular
     }

     public double area() {
        return lado * lado;
     }

     public void pinta(Graphics g,int x, int y,Color color) {
         g.setColor(color);
         g.fillRect(x,y,(int)lado,(int)lado);
     }

     public void borra(Graphics g, int x, int y) {
        g.clearRect(x,y,(int)lado,(int)lado);
     }
}

_____________________________________________________________________________

Código 3: Pintador.java

import java.awt.Graphics; // Graphic sirve para dibujar en un objeto
import java.awt.Color;
public interface Pintador {


    // g es el objeto que nos permite dibujar la figura
    // (x,y) debe ser la coordenadas de la esquina inferior izquierda
    public void pinta(Graphics g,int x,int y, Color color);

    // para borrar la figura
    public void borra(Graphics g, int x,int y);
}


Código 4: PrincipalInterface.java

import java.awt.*;

public class PrincipalInterface {
    public static void main(String[] args) {
       Cuadrado c1 = new Cuadrado(40);


       // hacemos una ventana para pintar los cuadrados
       Frame ventana = new Frame("Ventana con cuadrados");
       ventana.setLayout(new FlowLayout());
       // le añadimos una etiqueta
       Label l = new Label("           ");
       l.setBackground(Color.yellow);
       ventana.add(l);
       ventana.setSize(300,200);
       ventana.setVisible(true);

       // esto aún no puede  entenderse del todo...paciencia
       Graphics g = ventana.getGraphics();

       // esto funciona por ser Cuadrado un PolígonoRegular
       muestraArea(l,c1);

       // ...y esto  porque Cuadrado  implementa Pintador
        dibuja(g,c1);

    }

    public static void dibuja(Graphics g, Pintador p) {
       p.pinta(g,30,30,Color.pink);
       p.pinta(g,200,90,Color.orange);
       p.pinta(g,20,100,Color.green);
       p.borra(g,50,40);
       p.pinta(g,75,120,Color.blue);
    }

    public static void muestraArea(Label etiq, PoligonoRegular r) {
         etiq.setText(" "+r.area());
    }
}


No hay comentarios:

Publicar un comentario