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] |