cap9 menu+linea


NUEVAS CLASES PARA DIBUJO

La descomposición funcional de los métodos para dibujo proporcionados por el doble-buffering se pueden extender a otras clases. Por ejemplo, se puede diseñar una clase especializada en un tipo de salida (gráficos, informes, CAD, etc.). Pasándole el contexto gráfico como argumento al constructor, la nueva clase podrá construir la imagen. Esta clase puede ser reutilizada en cualquier otro applet que lo necesite. Por ejemplo, el código del fichero fuente EspiralTest.java siguiente muestra la clase Espiral. El applet espiral crea y usa un objeto Espiral. La representación en pantalla se construye enteramente en la nueva clase:

import java.awt.*;
import java.applet.Applet;

// Clase de ejemplo para dibujar en contextos gráficos
class Espiral {
    // Al ser privada, las variables son sólo accesibles por esta clase
    private int iniX,iniY,iniAncho,iniAlto;
    private int incremento;
    private Graphics cg;

    // constructor. crea una referencia local al buffer gráfico y define
    // el azul como color de los objetos que se dibujen sobre ella
    public Espiral( Graphics g ) {
        cg = g;
        cg.setColor( Color.blue );
        }

    // Establece el tamaño y posición iniciales de la espiral
    public void setTamInicial( int x,int y,int w,int h ) {
        iniX = x;
        iniY = y;
        iniAncho = w;
        iniAlto = h;
        }

    // Establece el incremento para espaciar los giros
    public void setTamEspiral( int inc ) {
        incremento = inc;
        }

    // Construye la espiral
    public void creaEspiral() {
        int cX = iniX;
        int cY = iniY;

        // Dibuja líneas por pares, cubriéndose entre sí para formar la
        // espiral cuadrada hasta alcanzar el tamaño del incremento
        while( iniAncho > incremento && iniAlto > incremnto ) 
            {
            g.drawLine( cX,cY,(cX+iniAncho),cY );
            g.drawLine( (cX+iniAncho),Cy,(cX+iniAncho),(cY+iniAlto) );
            cX += iniAncho;
            cY += iniAlto;
            iniAncho -= incremento;
            iniAlto -= incremento;

            g.drawLine( cX,cY,(cX-iniAncho),cY );
            g.drawLine( (cX-iniAncho),Cy,(cX-iniAncho),(cY-iniAlto) );
            cX -= iniAncho;
            cY -= iniAlto;
            iniAncho -= incremento;
            iniAlto -= incremento;
            }
        }
    }

// Esta es la llamada a la clase desde un Applet Html
public class EspiralTest extends Applet {
    Image buffer;
    Espiral spiral;
    boolean cargado = false;

    synchronized public void init() {
        // crea un buffer donde dibujar
        buffer = createImage( 300,300 );
        // crea una nueva espiral
        spiral = new Espiral( buffer.getGraphics() );
        // establece el punto inicial y dimensiones
        spiral.setTamInicial( 10,10,200,200 );
        // establece el incremento
        spiral.setTamEspiral( 10 );
        // construye la espiral
        spiral.creaEspiral();
        }

    synchronized public void paint( Graphics g ) {
        g.drawImage( buffer,25,25,this );
        }
    }
linea2
menu
Tutorial de Java
[Anterior] [Indice] [Siguiente]
1