##
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 );
            }
        }

|  | ##### [Anterior] [Indice] [Siguiente]