You are on page 1of 18

Programacin de Grficos. Java2D Java2D.

CLASES DE DIBUJO Y CONTEXTOS GRFICOS Una de las tareas actualmente ms requerida en la programacin es la de generar aplicaciones que incluyan imgenes y dibujos. Esto pertenece al contexto de la informtica grfica. Hoy en da es casi indispensable su uso ya que pertenecemos a un mundo cada vez ms visual y menos textual. En el caso de Java hay diversos paquetes que se encargan de apoyar este uso de la programacin. Son: java.awt.color: Para representar colores. java.awt.font.: Para representar tipos de letra. java.awt.geom. Para representar formas geomtricas. Contiene las clases de dibujo de formas (Arc2D, QuadCurve2D, etc.) java.awt.image.: Para representar imgenes. java.awt.print.: Para conectar con la impresora. java.awt.Graphics2D.: Es la nueva clase que representa contextos grficos. Sustituye a la anterior java.awt.Graphics. De todas ellas la ms importante es Graphics2D que es la clase perteneciente al nuevo soporte grfico Java 2D. Mejora sustancialmente los grficos existentes en Java hasta la versin 1.1 Esta clase representa el contexto en el que se dibujan los grficos, y suministra mtodos avanzados para crear grficos en pantalla. Para conseguir el objeto Graphics2D en el que deseamos dibujar se pueden utilizar estos mtodos: Utilizar desde clases AWT o Swing como resultado de una peticin de dibujo. Esta peticin se pasa al mtodo paint, paintComponent o update que reciben un objeto Graphics que mediante cast puede convertirse a Graphics2D (ya que la clase Graphics2D es hija de Graphics). Pidindole de modo directo a un bfer de memoria. Copiando de modo directo un objeto Graphics2D ya existente. Mtodo paint y paintComponent paint es el mtodo heredado de JComponent encargado de dibujar los elementos del componente, de los componentes ineriores, uso de la memoria intermedia para grficos, preparacin del contexto grfico, ... Adems como cada componente posee este mtodo, el paint del objeto contenedor llama los paint correspondientes del resto de componentes. En el caso de los componentes es recomendable usar paintComponent para dibujar los grficos (en detrimento de paint). La razn es que este mtodo dibuja el contenido slo del componente, adems el mtodo paint de la clase contenedora se encarga de llamar a estos mtodos de las clases hijas, por lo que stas no deben utilizar paint. Es ms paint delegada su trabajo en otros tres mtodos paintComponent (encargado de redibujar el componente), paintBorder (para redibujar el borde) y paintChildren (encargada de repintar los componentes contenidos en el actual). Pero se sigue utilizando el mtodo paint para indicar como se debe dibujar el rea de trabajo. Nunca se ha de llamar a paint o paintComponent explcitamente, sino que se llama automticamente por parte del panel siempre que haga falta o bien se utiliza la funcin repaint en el caso de que se necesite su llamada explcita (no se debe usar update como ocurra en AWT).

Normas para pintar con Swing En los programas Swing, a la hora de escribir el cdigo de pintado, hay que entender perfectamente las siguientes reglas. 1) Para los componentes Swing, paint() se invoca siempre como resultado tanto de las rdenes del sistema como de la aplicacin; el mtodo update() no se invoca jams sobre componentes Swing 2) Jams se debe utilizar una llamada a paint, este mtodo es llamado automticamente. Los programas pueden provocar una llamada futura a paint() invocando a repaint(). 3) En componentes con salida grfica compleja, repaint() debera ser invocado con argumentos para definir el rectngulo que necesita actualizacin, en lugar de invocar la versin sin argumentos, que hace que sea repintado el componente completo 4) La implementacin que hace Swing de paint (), reparte esa llamada en tres llamadas separadas: paintComponent (), paintBorder () y paintChildren (). Los componentes internos Swing que deseen implementar su propio cdigo de repintado, deberan colocar ese cdigo dentro del mbito del mtodo paintComponent (); no dentro de paint (). paint se utiliza slo en componentes grandes (como JFrame). 5) Es aconsejable que los componentes (botones, etiquetas,...) estn en contenedores distintos de las reas de pintado de grficos para evitar problemas. Es decir se suelen fabricar paneles distintos para los grficos que para los componentes. Representacin de grficos con Java 2D Gracias a este conjunto de paquetes se puede: Producir una forma Rellenar con colores slidos o con texturas Transformar los objetos Recortar formas para restringirlas a un rea Establecer reglas de composicin para indicar como se combinan los pxeles que se quieren pintar sobre pxeles previos ya pintados Indicar modos de representacin para acelerar la representacin de grficos ( a costa de la velocidad). Los pasos detallados para crear grficos en Java 2D son: 1. Obtener un objeto Graphics2D una forma comn de hacerlo es a travs del mtodo paint o paintComponent. public void paintComponent(Graphics g){ Graphics2D g2= (Graphics2D) g;

2. Establecer los consejos (hints) de representacin grficos 3. Establecer el trazo de dibujo mediante setStroke que poseen los objetos
Stroke: Stroke trazo=....; g2.setStroke (trazo); 4.- Establecer la pintura (indica cmo se rellenan las formas, color, textura, etc.) creando objetos Paint y utilizando el mtodo setPaint Paint pintura=...; g2.setPaint (pintura);

5.- Usar objetos de recorte (clase Shape) para delimitar la imagen a travs del mtodo setClip. Shape forma=...; g2.clip (forma); 6.- Transformar el dibujo mediante mtodos de transformacin o una transformacin afn g2.setTransform (AffineTransform.getRotationInstance (0.9); 7.- Transformar desde el espacio de usuario hasta el espacio de dispositivo si es necesario realizar conversin de coordenadas (slo es necesario si se desea trabajar con coordenadas personales, independientes de dispositivo). 8.- Establecer reglas de composicin para indicar como se mezclan los nuevos pxeles con los ya existentes. Composite mezcla=...; g2.setComposite (mezcla); 9.- Crear la forma combinando y mezclando los dibujos anteriores: Shape forma=.... 10.- Dibujar y rellenar la forma g2.draw (forma); g2.fill (forma); Casi nunca se realizan todos los pasos. Formas 2D En Java 1.0 la clase Graphics defina mtodos para dibujar formas. Desde 1.2, es decir desde la aparicin de Java 2D, se utilizan clases que representan estas formas. Todas las clases implementan la interfaz Shape que define unos cuantos mtodos relacionados con formas grficas bidimensionales. Mtodos de la interfaz Shape Como se ha dicho anteriormente, las formas 2D implementan esta interfaz. Con lo cual los mtodos definidos en ella sirven para todas las formas. Son: boolean contains (double x, double y): Chequea si el punto x, y est en el interior de la forma, si es as devuelve true. boolean contains (Point2D p): Chequea si el punto p (de tipo java.awt.geom.Point2D): est en el interior de la forma, si es as devuelve true. boolean contains (double x, double y, double ancho, double alto): Devuelve true si el rectngulo formado por la coordenada x,y (referida a la esquina superior izquierda del rectngulo) y la anchura y altura indicadas, estn totalmente dentro de la forma. boolean contains (Rectangle2D r): Devuelve true si el rectngulo r (de tipo java.awt.geom.Rectangle2D): est en el interior de la forma. Rectangle getBounds (): Devuelve un objeto java.awt.Rectangle que contiene totalmente a la forma. Rectangle2D getBounds2D(): Devuelve un objeto java.awt.Rectangle2D que contiene totalmente a la forma PathIterator getPathIterator(AffineTransform at). Obtiene un objeto iterador que interacciona con la superficie de la forma y permite acceso a su geometra. boolean intersects(double x, double y, double ancho, double alto): Devuelve true si el rectngulo formado por la coordenada x,y (referida a la esquina superior izquierda del rectngulo) y la anchura y altura indicadas, hace interseccin con la forma

boolean intersects(Rectangle2D r) Devuelve true si el rectngulo r hace interseccin


con la forma

Formas rectangulares La superclase RectangularShape es la clase padre de Rectangle2D (que representa rectngulos), RoundRectangle (rectngulo de esquinas redondeadas), Ellipse2d (elipses) y Arc2D (Arcos). Todas las formas descritas se puede entender que estn inscritas en un rectngulo, lo que facilita su uso. De hecho, todas derivan de la clase RectangularShape que proporciona mtodos interesantes para manipular las formas. Son (adems de los heredados de la clase Shape): double getCenterX(): Devuelve la coordenada X del centro del rectngulo. double getCenterY(): Devuelve la coordenada Y del centro del rectngulo. double getHeight(): Altura del rectngulo. double getMaxX(): Coordenada X ms larga del rectngulo. double getMaxY(): Coordenada Y ms larga del rectngulo. double getMinX(): Coordenada X ms corta del rectngulo. double getMinY(): Coordenada Y ms corta del rectngulo. double getWidth(): Anchura del rectngulo. double getX(): Coordenada X de la esquina superior izquierda del rectngulo. double getY(): Coordenada Y de la esquina superior izquierda del rectngulo. void setFrame(double x, double y, double anchura, double altura): Establece nueva medida y posicin para el rectngulo. void setFrameFromCenter(double x, double y, double esquinaX, double esquinaY): Modifica el rectngulo para que obtenga su posicin a partir del centro marcado por x, y por las dos coordenadas de una de las esquinas. void setFrameFromDiagonal(double x1, double y1, double x2, double y2): Modifica el rectngulo para que obtenga su posicin a partir de las coordenadas de los dos vrtices indicados. Las coordenadas de todas las clases que terminan en 2D se pueden obtener en formato float o double, a travs de una clase inscrita que poseen todas ellas (Rectangle2D.Float y Rectangle2D.Double por ejemplo). La ventaja de float es que proporcionan suficiente precisin gastando menos memoria. La ventaja de double es que se manipula ms rpido por parte del procesador y da mayor precisin. Slo en la construccin hay que elegir este detalle Creacin: Rectangle2D rectangulo=new Rectangle2D.Float (5F, 10F, 7.5F,15F); Rectangle2D rect2=new Rectangle2D.Double (5, 10,7.5, 15); Constructores Slo se comenta la versin Double pero hay que recordar que hay versin Float (que sera igual pero cambiando los tipos double por float). Rectangle2D.Double (double x, double y, double ancho, double alto): Crea un rectngulo con la esquina superior izquierda en la coordenada x, y y una anchura y altura dadas Ellipse2D.Double (double x, double y, double ancho, double alto): Crea una elipse inscrita en el rectngulo definido por esos cuatro parmetros. Arc2D.Double (double x, double y, double ancho, double alto, double inicio, double longitud, int tipoDeCierre): Crea un arco inscrito en el rectngulo definido por los cuatro primeros parmetros. El arco se empezar a dibujar desde el inicio marcado en ngulos (0,

90, etc.) y durante los grados marcados por longitud (inicio 90 y longitud 90, significa un ngulo de 90 a 180 grados).El tipo de cierre puede ser alguna de estas constantes: Arc2D.OPEN. El arco no se cierra Arc2D.CHORD. El arco se cierra con una recta Arc2D.PIE. El arco se cierra en forma de tarta, las lneas van de los extremos de la curva al centro de la elipse. Arc2D.Double(Rectangle2D rectngulo, double inicio, double longitud, int tipoDeCierre): Igual que el anterior slo que los cuatro primeros parmetros se indican con un objeto en forma de rectngulo RoundRectangle2D.Double (double x, double y, double ancho, double alto, double anchoEsquina, double alturaEsquina): Crea un rectngulo de esquinas redondeadas. Los cuatro primeros parmetros indican la forma del rectngulo sin redondear. Las dos ltimas indican el tamao del arco de las esquinas. Puntos La clase Point2D crea puntos en el espacio que se pueden aplicar a diversas funciones. Su construccin requiere tambin elegir entre su clase interna Float o Double. Ejemplo: Point2D p=new Point2D.Double (10,45); Curvas Java 2D proporciona curvas cuadrticas y cbicas. Las cuadrticas son complejas de manipular para crearlas se utilizan dos coordenadas iniciales y dos finales ms dos coordenadas de control de curva. Ejemplo: QuadCurve2D c=new QuadCurve2D.Double (50, 50, 20, 30, 50,80) El resultado es: Las cbicas representan curvas de Bezier que permiten dibujar curvas ms eficientemente a travs de puntos de tangente. El formato es: new CubicCurve2D.Double(inicioX, inicioY, controlInicioX, controlInicioY, controlFinX, controlFinY, finX, finY); Ejemplo: CubicCurve2D c=new CubicCurve2D.Double (20, 30, 30, 60, 60, 40, 50,80) El resultado es: Hay una forma mucho ms compleja que es el objeto GeneralPath. Este objeto permite encadenar curvas y rectas. Se construye con el constructor sin argumentos o utilizando un constructor que usa como argumento una forma ya hecha que ser la primera curva de la secuencia. Despus el mtodo moveTo se especifica la primera coordenada. El mtodo linito permite dibujar una lnea desde el punto anterior a uno nuevo. El mtodo curveTo permite dibujar una curva de Bezier al siguiente punto. Los parmetros son: curveTo(controlPuntoAnteriorX,

controlPuntoAnteriorY,controlX, controlY, X, Y); El mtodo closePath permite cerrar la curva. Ejemplo: El mtodo moveTo no sirve slo para empezar la ruta, marca tambin otro segmento de ruta. reas Una tcnica muy interesante para construir formas consiste en usar operaciones lgicas para unir, restar o intersectar figuras. Hay cuatro operaciones de este tipo: Para realizar estas operaciones se requiere un objeto de rea (clase Area). Es esta clase la que posee estos mtodos. La clase Area posee un constructor en el que se pueden colocar objetos Shape. De esta forma se pueden combinar figuras como se muestra en el ejemplo: Graphics2D g2= (Graphics2D) g; Area a1=new Area (new Rectangle2D.Double (100, 100, 400,200)); Area a2=new Area (new Ellipse2D.Double (150,50, 250, 400)); a1.add (a2); g2.draw (a1); Trazos Define los bordes de las formas dibujadas. Por defecto es una lnea de un pxel que contornea a la forma. La interfaz Stroke es el que permite definir trazos. En Java2D slo la clase BasicStroke (dentro de java.awt) implementa dicho interfaz. Esta interfaz devuelve slo un mtodo llamado createdStrokedShape que recibe una forma Shape y devuelve otra forma cuyo contenido es el trazo definido alrededor del Shape utilizado como argumento. El mtodo setStroke de la clase Graphics2D es el que establece el trazo actual. Ejemplo: //si g2 es un Graphics2D g2.setStroke (new BasicStroke (10.0F)); g2.draw (new Ellipse2D.Double (15, 40, 140,310)); En el ejemplo la elipse tendr una anchura de 10 pxeles. Constructores de BasicStroke

BasicStroke(float ancho): Crea un trazo con la anchura dada. BasicStroke(float ancho, int finalLnea, int unin): Crea un trazo con la anchura dada.

Especifica tambin un final de lnea que puede ser: BasicStroke.CAP_BUTT. Final de lnea en recto. BasicStroke.CAP_ROUND. Final de lnea redondeada. BasicStroke.CAP_SQUARE. Final de lnea en cuadrado (el borde se extiende ms que en recto), Se especifica tambin la forma de esquinas de las lneas. BasicStroke.JOIN_BEVEL. Vrtice de lnea en bisel. BasicStroke.JOIN_MITER. Vrtice de lnea en inglete. BasicStroke.JOIN_ROUND. Vrtice de lnea en redondeado.

BasicStroke(float ancho, int finalLnea, int unin, float lmite, float[] trazoLnea, float faseDeTrazo): Igual que la anterior pero con otros tres parmetros ms: el mximo desfase de las esquinas y extremos de la lnea, un array de nmeros float para indicar el grosor de los trazos de la lnea y un ltimo parmetro para indicar en que posicin comienzan esos trazos. Ejemplo: float lineaPuntoYRaya={20,5,5,5};//Raya (20), espacio (5) //punto (5), espacio (5) g2.setStroke (new BasicStroke(15F, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10F, lineaPuntoYRaya,0); Dibuja lnea de 15 pxeles en recto con forma de lnea en punto y raya. Pintura La interfaz Paint permite indicar de qu forma se rellenarn las formas dibujadas. El mtodo setPaint de la clase Graphics2D es el que permite indicar la forma de la pintura. Este mtodo requiere una clase que implemente la interfaz Paint. Tras utilizar el mtodo setPaint, los mtodos fill (pintar el relleno) y draw (pintar el contorno) rellenan con el color elegido. Pintar con color La clase Color tratada anteriormente implementa el interfaz Paint, por lo que el relleno con un color es muy sencillo. Ejemplo: g2.setPaint(Color.RED); Esta instruccin coloca rojo como el color de pintura. Este ser el color que utilice el mtodo fill que es el que realmente rellena una forma (que se debe pasar como argumento) con la pintura elegida. Si tras setPaint, el mtodo que se usa es draw, entonces es el borde el que aparecer de color rojo. Pintar con gradientes Un gradiente es una forma de pintura en degradado desde un color a otro. Se crea mediante la clase GradientPaint a la que se la pasan dos puntos y el color de cada uno.

GradientPaint (float x1, float y1, Color color1, float x2, float y2, Color color2):

Gradiente que va desde la coordenada (x1,y1) a la coordenada (x2,y2) y que hace transicin de colores (gradiente) desde el color1 hasta el color2. GradientPaint(float x1, float y1, Color color1, float x2, float y2, Color color2, boolean cclico): Igual que el anterior, slo que permite que el gradiente sea cclico (se repite continuamente) GradientPaint (Point2D p1, Color color1, Point2D p1, Color color2), GradientPaint (Point2D p1, Color color1, Point2D p1, boolean cclico): Versiones de los constructores anteriores usando objetos Point2D para especificar las coordenadas. Ejemplo: Point2D p1=new Point2D.Double(80,100); Point2D p2=new Point2D.Double(200,200); g2.setPaint(new GradientPaint(p1,Color.BLACK,p2,Color.YELLOW)); g2.fill(a1); g2.draw(a1);

Y esto es equivalente a: g2.setPaint(new GradientPaint(80,100,Color.BLACK, 200,200,Color.YELLOW); g2.fill(a1); DIBUJO DE FUNCIONES GRAFICAS A travs de lneas tambin se pueden realizar figuras ms complicadas que resulten de la representacin grfica de funciones matemticas. No pretendemos entrar en complicadas disquisiciones matemticas, sino presentar algunas de las particularidades de los grficos y Java. Vamos a presentar el cdigo siguiente, Grafico1.java, que pintar la curva de la funcin seno de izquierda a derecha de la ventana: import java.awt.*; import java.applet.Applet; public class Grafico1 extends Applet { int x0,xN,y0,yN; public void init() { Dimension d = size(); x0 = y0 = 0; xN = d.width-1; yN = d.height-1; } public void paint( Graphics g ) { for( int x=x0; x < xN; x++ ) g.drawLine( x,(int)(yN*Math.sin(x)), x+1,(int)(yN*Math.sin(x+1)) ); } } El corazn del funcionamiento del applet se encuentra en el bucle incluido en el mtodo paint (): for ( int x=x0; x < xN; x++ ) g.drawLine( x,(int)(yN*Math.sin(x)),x+1,(int)(yN*Math.sin(x+1))); El bucle va desplazndose a travs de cada pixel de la pantalla en el eje x, y en cada una de las posiciones, calcula el seno para ese pixel. Tambin calcula el seno del pixel siguiente y pinta una lnea que une esos dos puntos. Debido a que el seno de un nmero real est siempre comprendido entre 1 y -1, escalamos el valor de y con yN. Y por fin hacemos un casting de los valores del seno en el eje y porque son flotantes fundamentalmente y el mtodo drawLine() necesita enteros. El applet anterior funciona correctamente, pero adolece de dos problemas: Primero, los senos son operaciones en coma flotante, luego para que el applet tenga realmente utilidad necesitamos utilizar nmeros en coma flotante. Segundo, el sistema de coordenadas que maneja el applet va desde el punto (0,0), de la esquina superior-izquierda hasta la inferior-derecha. Pero el sistema normal de coordenadas Cartesianas empieza a contar desde la esquina inferior-izquierda. Lo que haremos ser mover el origen al centro del applet y transformar las coordenadas del eje y para que vayan en las direcciones adecuadas. La solucin a los dos problemas anteriores puede tomar un montn de caminos diferentes, sin embargo, la clave se encuentra en separar los datos de lo que es la pantalla. Es decir, vamos a

realizar nuestros clculos matemticos suponiendo que estamos en el espacio de un rectngulo en coordenadas cartesianas y, por otro lado, tomaremos a la pantalla como un rectngulo de puntos de ancho y tamao fijos. As podremos realizar los clculos en el plano de los ejes cartesianos y presentarlos en el espacio reducido de la ventana del applet. Necesitaremos pues, un mtodo para convertir un punto de la ventana del applet en un punto en el mundo cartesiano, y otro que haga la funcin contraria. El cdigo siguiente, GraficoSeno.java, hace todo esto: import java.awt.*; import java.applet.Applet; public class GraficoSeno extends Applet { int x0,xN,y0,yN; double xmin,xmax,ymin,ymax; int apAncho,apAlto; public void init() { Dimension d = size(); apAncho = d.width; apAlto = d.height; x0 = y0 = 0; xN = apAncho-1; yN = apAlto-1; xmin = -10.0; xmax = 10.0; ymin = -1.0; ymax = 1.0; } public void paint( Graphics g ) { double x1,y1,x2,y2; int j1,j2; j1 = ValorY( 0 ); for( int i=0; i < apAncho; i++ ) { j2 = ValorY( i+1 ); g.drawLine( i,j1,i+1,j2 ); j1 = j2; } } private int ValorY( int valor ) { double x,y; int retorno; // Cartesianas equivalentes al punto de la pantalla x = (valor * (xmax-xmin) / (apAncho-1)) + xmin; // Calculamos el seno de ese punto y = Math.sin( x ); // Escalamos la coordenada y dentro de los limites de la ventana retorno = (int)( (y-ymin) * (apAlto-1) / (ymax-ymin) ); // Reconvertinos el valor cartesiano a punto de pantalla retorno = apAlto - retorno; return( retorno );

} } Ejecutando este applet, podremos observar que lo que se presenta ya se parece muchsimo ms a la imagen que todos conocemos de la onda senoidal.

COORDENADAS POLARES EN JAVA Class EscalaGraficaCartesiana java.lang.Object chuidiang.graficos.EscalaGraficaCartesiana All Implemented Interfaces: InterfaceEscalaGrafica public class EscalaGraficaCartesiana extends InterfaceEscalaGrafica

java.lang.Object

implements

Implementacin de EscalaGrafica para proporcionar unas coordenadas de usuario cartesianas a un Lienzo.


Constructor Summary EscalaGraficaCartesiana() Crea un nuevo objeto de la clase EscalaGraficaCartesiana.

Method Summary
void protected void anhadeObservador(ObservadorEscalaGrafica unObservador) Aade un observador a un cambio en los limites de usuario. avisaObservadores() Avisa a los obseravadores de lmites de usuario que estos han cambiado. dameAlto(double alto) Devuelve el alto en pixels de un alto en coordenadas de usuario. dameAncho(double ancho) Devuelve el ancho en pixel de un ancho en coordenadas de usuario. dameCoordenadaUsuario(java.awt.geom.Point2D punto) Devuelve las coordenadas de usuario correspondientes a unas coordenadas x,y en pixels.

double double

java.awt.geom.Point2D

java.awt.geom.Rectangle2 dameExtremos() D Devuelve un Rectagle2D con los limites de las coordenadas de usuario. void eliminaObservador(ObservadorEscalaGrafica unObservador) Elimina un observador de cambio en los limites de usuario que se haya aadido previamente con anhadeObservador() getZoomable() Devuelve una clase adecuada para hacer zoom y desplazar un grfico con esta EscalaGraficaCartesiana pintaArco(java.awt.geom.Point2D esquina, double ancho, double alto, double arcoInicial, double arcoFinal, java.awt.Color color) Dibuja un arco llamando a la clase drawArc() de Graphcis. pintaArcoRelleno(java.awt.geom.Point2D centro, double ancho, double alto, double arcoInicial, double arcoFinal, java.awt.Color color) Dibuja un arco llamando a la clase drawArc() de Graphcis. pintaEjeX(double y, java.awt.Color color) Pinta un eje de x, desde x minima hasta x maxima. pintaEjeY(double x, java.awt.Color color) Dibuja un eje de las y, desde y minima a y maxima. pintaImagen(java.awt.geom.Point2D posicion, java.awt.Image imagen) Dibuja una imagen en el area grafica. pintaPoliLinea(java.awt.geom.Point2D[] puntos, java.awt.Color color) Dibuja un linea uniendo consecutivamente todos los puntos que se le pasan. void void void pintaPuntos(java.awt.geom.Point2D[] puntos, java.awt.Color color) Dibuja los puntos x[i], y[i] de color pintaPuntos(java.awt.geom.Point2D[] puntos, java.awt.Color[] color) Dibuja los puntos del x[i], y[i] del color[i] pintaRectanguloRelleno(java.awt.geom.Point2D esquina, double ancho, double alto, java.awt.Color color) Dibuja un rectangulo relleno llamando a fillRect() de la clase Graphics. pintaRectanguloRelleno3D(java.awt.geom.Point2D esquina, double ancho, double alto, java.awt.Color color, boolean elevado) Dibuja un rectangulo relleno en 3D llamando al metodo fill3DRect() de la clase Graphics. pintaTexto(java.awt.geom.Point2D posicion, java.lang.String texto, java.awt.Color color) Dibuja un texto en la posicin y del color indicado. tomaExtremos(double xMin, double yMax) double yMin, double xMax,

InterfaceZoomable

void

void

void void void

void

void

void

void

Methods inherited from class java.lang.Object


clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructor Detail: EscalaGraficaCartesiana public EscalaGraficaCartesiana() Crea un nuevo objeto de la clase EscalaGraficaCartesiana.
Method Detail: getZoomable public InterfaceZoomable getZoomable() Devuelve una clase adecuada para hacer zoom y desplazar un grfico con esta EscalaGraficaCartesiana Specified by: getZoomable in interface InterfaceEscalaGrafica Returns: La clase encargada de hacer zoom. anhadeObservador public void anhadeObservador(ObservadorEscalaGrafica unObservador) Aade un observador a un cambio en los limites de usuario. Cuando se cambien losG limites de usuario con tomaExtremos(), se avisar a los observadores. Specified by: anhadeObservador in interface InterfaceEscalaGrafica Parameters: unObservador - un observador de cambio de extremos en la escala grafica. dameAlto public double dameAlto(double alto) Devuelve el alto en pixels de un alto en coordenadas de usuario. Un alto en coordenadas de usuario es la diferencia entre dos y en coordenadas de usuario. Parameters: alto - Alto en coordenadas de usuario. Returns: alto en pixels. dameAncho public double dameAncho(double ancho) Devuelve el ancho en pixel de un ancho en coordenadas de usuario. Un ancho en coordenadas de usuario es la diferencia entre dos x en coordenadas de usuario. Parameters: ancho - Ancho en coordenadas de usuario. Returns: ancho en pixels. dameCoordenadaUsuario public java.awt.geom.Point2D dameCoordenadaUsuario(java.awt.geom.Point2D punto)

Devuelve las coordenadas de usuario correspondientes a unas coordenadas x,y en pixels. Specified by: dameCoordenadaUsuario in interface InterfaceEscalaGrafica Parameters: punto - Un punto en pixels. Returns: Un punto en coordenadas de usuario. dameExtremos public java.awt.geom.Rectangle2D dameExtremos() Devuelve un Rectagle2D con los limites de las coordenadas de usuario. Specified by: dameExtremos in interface InterfaceEscalaGrafica Returns: Las dimensiones del area de dibujo. eliminaObservador public void eliminaObservador(ObservadorEscalaGrafica unObservador) Elimina un observador de cambio en los limites de usuario que se haya aadido previamente con anhadeObservador() Specified by: eliminaObservador in interface InterfaceEscalaGrafica Parameters: unObservador - Un observador de la escala grafica. pintaArco public void pintaArco(java.awt.geom.Point2D esquina, double ancho, double alto, double arcoInicial, double arcoFinal, java.awt.Color color) Dibuja un arco llamando a la clase drawArc() de Graphcis. El archo forma parte de un crculo que a su vez se puede considerar inscrito en un rectangulo. Specified by: pintaArco in interface InterfaceEscalaGrafica Parameters: esquina - esquina inferior derecha del rectangulo que contiene al circulo. ancho - ancho del rectangulo. alto - alto del rectangulo. arcoInicial - angulo en el que empieza a dibujarse el arco, en radianes. arcoFinal - angulo en el que termina de dibujarse el arco, en radianes. color - Color del arco. pintaArcoRelleno public void pintaArcoRelleno(java.awt.geom.Point2D centro, double ancho, double alto, double arcoInicial,

double arcoFinal, java.awt.Color color) Dibuja un arco llamando a la clase drawArc() de Graphcis. El archo forma parte de un crculo que a su vez se puede considerar inscrito en un rectangulo. Specified by: pintaArcoRelleno in interface InterfaceEscalaGrafica Parameters: esquina - esquina inferior derecha del rectangulo que contiene al circulo. ancho - ancho del rectangulo. alto - alto del rectangulo. arcoInicial - angulo en el que empieza a dibujarse el arco, en radianes. arcoFinal - angulo en el que termina de dibujarse el arco, en radianes. color - Color del arco. pintaEjeX public void pintaEjeX(double y, java.awt.Color color) Pinta un eje de x, desde x minima hasta x maxima. Specified by: pintaEjeX in interface InterfaceEscalaGrafica Parameters: y - Altura a la que se quiere dibujar el x. color - Color del eje. pintaEjeY public void pintaEjeY(double x, java.awt.Color color) Dibuja un eje de las y, desde y minima a y maxima. Specified by: pintaEjeY in interface InterfaceEscalaGrafica Parameters: x - Posicion del eje a dibujar. color - Color del eje. pintaImagen public void pintaImagen(java.awt.geom.Point2D posicion, java.awt.Image imagen) Dibuja una imagen en el area grafica. Specified by: pintaImagen in interface InterfaceEscalaGrafica Parameters: posicion - Posicion de la esquina superior izquierda de la imagen. imagen - La imgagen. pintaPoliLinea public void pintaPoliLinea(java.awt.geom.Point2D[] puntos, java.awt.Color color) Dibuja un linea uniendo consecutivamente todos los puntos que se le pasan. La lnea ser del color indicado. Specified by:

pintaPoliLinea in interface InterfaceEscalaGrafica Parameters: puntos - COMENTARIO. color - COMENTARIO. pintaPuntos public void pintaPuntos(java.awt.geom.Point2D[] puntos, java.awt.Color[] color) Dibuja los puntos del x[i], y[i] del color[i] Specified by: pintaPuntos in interface InterfaceEscalaGrafica Parameters: puntos - Array de puntos a pintar, en coordenadas de usuario. color - Array de colores para los puntos. pintaPuntos public void pintaPuntos(java.awt.geom.Point2D[] puntos, java.awt.Color color) Dibuja los puntos x[i], y[i] de color Specified by: pintaPuntos in interface InterfaceEscalaGrafica Parameters: puntos - Array de puntos para pintar. color - Color para todos los puntos. pintaRectanguloRelleno public void pintaRectanguloRelleno(java.awt.geom.Point2D esquina, double ancho, double alto, java.awt.Color color) Dibuja un rectangulo relleno llamando a fillRect() de la clase Graphics. Las coordenadas de esquina, ancho y alto van en coordenadas de usuario. Specified by: pintaRectanguloRelleno in interface InterfaceEscalaGrafica Parameters: esquina - Esquina inferior izquierda del rectngulo. ancho - Ancho del rectngulo, en coordenadas de usuario. alto - Alot del rectngulo. color - Color del rectngulo. pintaRectanguloRelleno3D public void pintaRectanguloRelleno3D(java.awt.geom.Point2D esquina, double ancho, double alto, java.awt.Color color, boolean elevado) Dibuja un rectangulo relleno en 3D llamando al metodo fill3DRect() de la clase Graphics. La esquina, ancho y alto que se len pasan van en coordenadas de usuario. Specified by: pintaRectanguloRelleno3D in interface InterfaceEscalaGrafica

Parameters: esquina - Esquina inferior izquierda del rectngulo, en coordenadas de usuario. ancho - Ancho del rectngulo, en coordenadas de usuario. alto - Alto del rectngulo. color - Color del rectngulo. elevado - Si es o no elevado. pintaTexto public void pintaTexto(java.awt.geom.Point2D posicion, java.lang.String texto, java.awt.Color color) Dibuja un texto en la posicin y del color indicado. La posicin va en coordenadas de usuario. Specified by: pintaTexto in interface InterfaceEscalaGrafica Parameters: posicion - COMENTARIO. texto - COMENTARIO. color - COMENTARIO. tomaExtremos public void tomaExtremos(double xMin, double yMin, double xMax, double yMax) Se le pasan los valores minimos y maximos que se van a dibujar en el Lienzo. No comprueba que los valores minimos sean mas pequeos que los mximos. Specified by: tomaExtremos in interface InterfaceEscalaGrafica Parameters: xMin - COMENTARIO. yMin - COMENTARIO. xMax - COMENTARIO. yMax - COMENTARIO. tomaGraphics public void tomaGraphics(java.awt.Graphics g, int ancho, int alto) Guarda el ancho y alto del rea de dibujo. Crea una imagen para dibujar del ancho y alto que se le indican y calcula la AffineTransform encargada de transformar coordenadas de usuario en pixels. Pone unos valores minimos y maximos del grafico de -10.0 y 10.0 como valores por defecto. Specified by: tomaGraphics in interface InterfaceEscalaGrafica Parameters: g - COMENTARIO. ancho - COMENTARIO. alto - COMENTARIO. avisaObservadores

protected void avisaObservadores() Avisa a los obseravadores de lmites de usuario que estos han cambiado.

You might also like