Este documento presenta ejemplos de cómo dibujar líneas y figuras simples en Java. Explica el sistema de coordenadas de Java y cómo crear una ventana y panel para mostrar dibujos. Luego, muestra un ejemplo de código que dibuja dos líneas en forma de X en un panel, usando los métodos drawLine() y getWidth()/getHeight(). Finalmente, coloca el panel en un marco JFrame para mostrar el dibujo.
0 calificaciones0% encontró este documento útil (0 votos)
915 vistas9 páginas
Este documento presenta ejemplos de cómo dibujar líneas y figuras simples en Java. Explica el sistema de coordenadas de Java y cómo crear una ventana y panel para mostrar dibujos. Luego, muestra un ejemplo de código que dibuja dos líneas en forma de X en un panel, usando los métodos drawLine() y getWidth()/getHeight(). Finalmente, coloca el panel en un marco JFrame para mostrar el dibujo.
Este documento presenta ejemplos de cómo dibujar líneas y figuras simples en Java. Explica el sistema de coordenadas de Java y cómo crear una ventana y panel para mostrar dibujos. Luego, muestra un ejemplo de código que dibuja dos líneas en forma de X en un panel, usando los métodos drawLine() y getWidth()/getHeight(). Finalmente, coloca el panel en un marco JFrame para mostrar el dibujo.
Este documento presenta ejemplos de cómo dibujar líneas y figuras simples en Java. Explica el sistema de coordenadas de Java y cómo crear una ventana y panel para mostrar dibujos. Luego, muestra un ejemplo de código que dibuja dos líneas en forma de X en un panel, usando los métodos drawLine() y getWidth()/getHeight(). Finalmente, coloca el panel en un marco JFrame para mostrar el dibujo.
Descargue como DOCX, PDF, TXT o lea en línea desde Scribd
Descargar como docx, pdf o txt
Está en la página 1de 9
4.
14 (Opcional) Ejemplo prctico de GUI y grficos: creacin de dibujos simples
Esta seccin presenta una de las capacidades grficas de Java: dibujar lneas. Tambin cubre los aspectos bsicos acerca de cmo crear una ventana para mostrar un dibujo en la pantalla de la computadora.
Sistema de coordenadas (figura 4.18), un esquema para identificar cada uno de los puntos en la pantalla.
Figura 4.18 | Sistema de coordenadas de Java. Las unidades se miden en pxeles
Las coordenadas indican en dnde deben mostrarse los grficos en una pantalla. Las unidades de las coordenadas se miden en pxeles. Un pxel es la unidad de resolucin ms pequea de una pantalla. (El trmino pxel significa elemento de imagen).
Nuestra primera aplicacin de dibujo simplemente dibuja dos lneas. La clase PanelDibujo (figura 4.19) realiza el dibujo en s, mientras que la clase PruebaPanelDibujo (figura 4.20) crea una ventana para mostrar el dibujo. En la clase PanelDibujo, las instrucciones import de las lneas 3 y 4 nos permiten utilizar la clase Graphics (del paquete java.awt), que proporciona varios mtodos para dibujar texto y fi guras en la pantalla, y la clase JPanel (del paquete javax.swing), que proporciona un rea en la que podemos dibujar.
1 // Fig. 4.19: PanelDibujo.java 2 // Uso de drawLine para conectar las esquinas de un panel. 3 import java.awt.Graphics; 4 import javax.swing.JPanel; 5 6 public class PanelDibujo extends JPanel 7 { 8 // dibuja una x desde las esquinas del panel 9 public void paintComponent( Graphics g ) 10 { 11 // llama a paintComponent para asegurar que el panel se muestre correctamente 12 super.paintComponent( g ); 13 14 int anchura = getWidth(); // anchura total 15 int altura = getHeight(); // altura total 16 17 // dibuja una lnea de la esquina superior izquierda a la esquina inferior derecha 18 g.drawLine( 0, 0, anchura, altura ); 19 20 // dibuja una lnea de la esquina inferior izquierda a la esquina superior derecha 21 g.drawLine( 0, altura, anchura, 0 ); 22 } // fin del mtodo paintComponent 23 } // fin de la clase PanelDibujo La lnea 6 utiliza la palabra clave extends para indicar que la clase PanelDibujo es un tipo mejorado de JPanel (herencia).
Todo JPanel, incluyendo nuestro PanelDibujo, tiene un mtodo paintComponent (lneas 9 a 22), que el sistema llama automticamente cada vez que necesita mostrar el objeto JPanel. El mtodo paintComponent debe declararse como se muestra en la lnea 9; de no ser as, el sistema no llamar al mtodo. Este mtodo se llama cuando se muestra un objeto JPanel por primera vez en la pantalla, cuando una ventana en la pantalla lo cubre y despus lo descubre, y cuando la ventana en la que aparece cambia su tamao. El mtodo paintComponent requiere un argumento, un objeto Graphics, que el sistema proporciona por usted cuando llama a paintComponent.
La primera instruccin en cualquier mtodo paintComponent que cree debe ser siempre: super.paintComponent( g );
la cual asegura que el panel se despliegue apropiadamente en la pantalla, antes de empezar a dibujar en l. A continuacin, las lneas 14 y 15 llaman a dos mtodos que la clase PanelDibujo hereda de la clase JPanel. Como PanelDibujo extiende a JPanel, PanelDibujo puede usar cualquier mtodo public que est declarado en JPanel. Los mtodos getWidth y getHeight devuelven la anchura y la altura del objeto JPanel, respectivamente. Las lneas 14 y 15 almacenan estos valores en las variables locales anchura y altura. Por ltimo, las lneas 18 y 21 utilizan la referencia g de la clase Graphics para llamar al mtodo drawLine, y que dibuje las dos lneas. Los primeros dos argumentos son las coordenadas x y y para uno de los puntos fi nales de la lnea, y los ltimos dos argumentos son las coordenadas para el otro punto fi nal. Si cambia de tamao la ventana, las lneas se escalaran de manera acorde, ya que los argumentos se basan en la anchura y la altura del panel. Al cambiar el tamao de la ventana en esta aplicacin, el sistema llama a paintComponent para volver a dibujar el contenido de PanelDibujo. Para mostrar el PanelDibujo en la pantalla, debemos colocarlo en una ventana. Usted debe crear una ventana con un objeto de la clase JFrame. En PruebaPanelDibujo.java (figura 4.20), la lnea 3 importa la clase JFrame del paquete javax.swing. La lnea 10 en el mtodo main de la clase PruebaPanelDibujo crea una instancia de la clase PanelDibujo, la cual contiene nuestro dibujo, y la lnea 13 crea un nuevo objeto JFrame que puede contener y mostrar nuestro panel. La lnea 16 llama al mtodo setDefaultCloseOperation con el argumento JFrame.EXIT_ON_CLOSE, para indicar que la aplicacin debe terminar cuando el usuario cierre la ventana. La lnea 18 utiliza el mtodo add de JFrame para adjuntar el objeto PanelDibujo, que contiene nuestro dibujo, al objeto JFrame. La lnea 19 establece el tamao del objeto JFrame. El mtodo setSize recibe dos parmetros: la anchura del objeto JFrame y la altura. Por ltimo, la lnea 20 muestra el objeto JFrame. Cuando se muestra este objeto, se hace la llamada al mtodo paintComponent de PanelDibujo (lneas 9 a 22 de la fi gura 4.19) y se dibujan las dos lneas (vea los resultados de ejemplo de la fi gura 4.20). Cambie el tamao de la ventana, para que vea que las lneas siempre se dibujan con base en la anchura y altura actuales de la ventana.
1 // Fig. 4.20: PruebaPanelDibujo.java 2 // Aplicacin que muestra un PanelDibujo. 3 import javax.swing.JFrame; 4 5 public class PruebaPanelDibujo 6 { 7 public static void main( String args[] ) 8 { 9 // crea un panel que contiene nuestro dibujo 10 PanelDibujo panel = new PanelDibujo(); 11 12 // crea un nuevo marco para contener el panel 13 JFrame aplicacion = new JFrame(); 14 15 // establece el marco para salir cuando se cierre 16 aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 17 18 aplicacion.add( panel ); // agrega el panel al marco 19 aplicacion.setSize( 250, 250 ); // establece el tamao del marco 20 aplicacion.setVisible( true ); // hace que el marco sea visible 21 } // fin de main 22 } // fin de la clase PruebaPanelDibujo Ejercicios del ejemplo prctico de GUI y grficos 4.1 Utilizar ciclos e instrucciones de control para dibujar lneas puede producir muchos diseos interesantes. a) Cree el diseo que se muestra en la captura de pantalla izquierda de la fi gura 4.21. Este diseo dibuja lneas que parten desde la esquina superior izquierda, y se despliegan hasta cubrir la mitad superior izquierda del panel. Un mtodo es dividir la anchura y la altura en un nmero equivalente de pasos (nosotros descubrimos que 15 pasos es una buena cantidad). El primer punto final de una lnea siempre estar en la esquina superior izquierda (0,0). El segundo punto final puede encontrarse partiendo desde la esquina inferior izquierda, y avanzando un paso vertical hacia arriba, y un paso horizontal hacia la derecha. Dibuje una lnea entre los dos puntos finales. Contine avanzando hacia arriba y a la derecha, para encontrar cada punto final sucesivo. La fi gura deber escalarse apropiadamente, a medida que se cambie el tamao de la ventana.
b) Modifique su respuesta en la parte (a) para hacer que las lneas se desplieguen a partir de las cuatro esquinas, como se muestra en la captura de pantalla derecha de la fi gura 4.21. Las lneas de esquinas opuestas debern intersecarse a lo largo de la parte media.
4.2 La fi gura 4.22 muestra dos diseos adicionales, creados mediante el uso de ciclos while y drawLine. a) Cree el diseo de la captura de pantalla izquierda de la figura 4.22. Empiece por dividir cada flanco en un nmero equivalente de incrementos (elegimos 15 de nuevo). La primera lnea empieza en la esquina superior izquierda y termina un paso a la derecha, en el flanco inferior. Para cada lnea sucesiva, avance hacia abajo un incremento en el flanco izquierdo, y un incremento a la derecha en el flanco inferior. Contine dibujando lneas hasta llegar a la esquina inferior derecha. La fi gura deber escalarse a medida que se cambie el tamao de la ventana, de manera que los puntos finales siempre toquen los flancos.
1 // Fig. 4.20: PruebaPanelDibujo.java 2 // Aplicacin que muestra un PanelDibujo. 3 import javax.swing.JFrame; 4 5 public class PruebaPanelDibujo 6 { 7 public static void main( String args[] ) 8 { 9 // crea un panel que contiene nuestro dibujo 10 PanelDibujo panel = new PanelDibujo(); 11 12 // crea un nuevo marco para contener el panel 13 JFrame aplicacion = new JFrame(); 14 15 // establece el marco para salir cuando se cierre 16 aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 17 18 aplicacion.add( panel ); // agrega el panel al marco 19 aplicacion.setSize( 250, 250 ); // establece el tamao del marco 20 aplicacion.setVisible( true ); // hace que el marco sea visible 21 } // fin de main 22 } // fin de la clase PruebaPanelDibujo
b) Modifique su respuesta en la parte (a) para reflejar el diseo en las cuatro esquinas, como se muestra en la captura de pantalla derecha de la figura 4.22.
5.10 (Opcional) Ejemplo prctico de GUI y grfi cos: dibujo de rectngulos y valos Esta seccin demuestra cmo dibujar rectngulos y valos, usando los mtodos drawRect y drawOval de Graphics, respectivamente. Estos mtodos se demuestran en la figura 5.26. La lnea 6 empieza la declaracin de la clase para Figuras, que extiende a JPanel. La variable de instancia opcin, declarada en la lnea 8, determina si paintComponent debe dibujar rectngulos u valos. El constructor de Figuras en las lneas 11 a 14 inicializa opcion con el valor que se pasa en el parmetro opcionUsuario. El mtodo paintComponent (lneas 17 a 36) realiza el dibujo actual. Recuerde que la primera instruccin en todo mtodo paintComponent debe ser una llamada a super.paintComponent, como en la lnea 19. Las lneas 21 a 35 iteran 10 veces para dibujar 10 figuras. La instruccin switch (lneas 24 a 34) elije entre dibujar rectngulos y dibujar valos. Si opcin es 1, entonces el programa dibuja un rectngulo. Las lneas 27 y 28 llaman al mtodo drawRect de Graphics. El mtodo drawRect requiere cuatro argumentos. Los primeros dos representan las coordenadas x y y de la esquina superior izquierda del rectngulo; los siguientes dos representan la anchura y la altura del rectngulo. En este ejemplo, empezamos en la posicin 10 pxeles hacia abajo y 10 pxeles a la derecha de la esquina superior izquierda, y cada iteracin del ciclo avanza la esquina superior izquierda otros 10 pxeles hacia abajo y a la derecha. La anchura y la altura del rectngulo empiezan en 50 pxeles, y se incrementan por 10 pxeles en cada iteracin. Si opcin es 2, el programa dibuja un valo. Al dibujar un valo se crea un rectngulo imaginario llamado rectngulo delimitador, y dentro de ste se crea un valo que toca los puntos medios de todos los cuatro lados del rectngulo delimitador. El mtodo drawOval (lneas 31 y 32) requiere los mismos cuatro argumentos que el mtodo drawRect. Los argumentos especifican la posicin y el tamao del rectngulo delimitador para el valo.
Figura 5.26 | Cmo dibujar una cascada de fi guras, con base en la opcin elegida por el usuario.
Los valores que se pasan a drawOval en este ejemplo son exactamente los mismos valores que se pasan a drawRect en las lneas 27 y 28. Como la anchura y la altura del rectngulo delimitador son idnticas en este ejemplo, las lneas 27 y 28 dibujan un crculo. Puede modificar el programa para dibujar rectngulos y valos, para ver cmo se relacionan drawOval y drawRect. La figura 5.27 es responsable de manejar la entrada del usuario y crear una ventana para mostrar el dibujo apropiado, con base en la respuesta del usuario. La lnea 3 importa a JFrame para manejar la pantalla, y la lnea 4 importa a JOptionPane para manejar la entrada. Las lneas 11 a 13 muestran un cuadro de dilogo al usuario y almacenan la respuesta de ste en la variable entrada. La lnea 15 utiliza el mtodo parseInt de Integer para convertir el objeto String introducido por el usuario en un int, y almacena el resultado en la variable opcin. En la lnea 18 se crea una instancia de la clase Figuras, y se pasa la opcin del usuario al constructor. Las lneas 20 a 25 realizan las operaciones estndar para crear y establecer una ventana: crear un marco, configurarlo para que la aplicacin termine cuando se cierre, agregar el dibujo al marco, establecer su tamao y hacerlo visible.
public class Figuras extends JPanel { private int opcion; // opcin del usuario acerca de cul figura dibujar
// el constructor establece la opcin del usuario public Figuras( int opcionUsuario ) { opcion = opcionUsuario; } // fin del constructor de Figuras
// dibuja una cascada de figuras, empezando desde la esquina superior izquierda public void paintComponent( Graphics g ) { super.paintComponent( g );
for ( int i = 0; i < 10; i++ ) { // elije la figura con base en la opcin del usuario switch ( opcion ) { case 1: // dibuja rectngulos g.drawRect( 10 + i * 10, 10 + i * 10, 50 + i * 10, 50 + i * 10 ); break; case 2: // dibuja valos g.drawOval( 10 + i * 10, 10 + i * 10, 50 + i * 10, 50 + i * 10 ); break; } // fin del switch } // fin del for } // fin del mtodo paintComponent } // fin de la clase Figuras
Figura 5.27 | Cmo obtener datos de entrada del usuario y crear un objeto JFrame para mostrar figuras.
// Fig. 5.27: PruebaFiguras.java // Aplicacin de prueba que muestra la clase Figuras. import javax.swing.JFrame; import javax.swing.JOptionPane;
public class PruebaFiguras { public static void main( String args[] ) { // obtiene la opcin del usuario String entrada = JOptionPane.showInputDialog( "Escriba 1 para dibujar rectangulos\n" + "Escriba 2 para dibujar ovalos" );
int opcion = Integer.parseInt( entrada ); // convierte entrada en int
// crea el panel con la entrada del usuario Figuras panel = new Figuras( opcion );
JFrame aplicacion = new JFrame(); // crea un nuevo objeto JFrame
aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); aplicacion.add( panel ); // agrega el panel al marco aplicacion.setSize( 300, 300 ); // establece el tamao deseado aplicacion.setVisible( true ); // muestra el marco } // fin de main } // fin de la clase PruebaFiguras 6.13 (Opcional) Ejemplo prctico de GUI y grficos: colores y fi guras rellenas
Aunque podemos crear muchos disenos interesantes solo con lineas y fi guras basicas, la clase Graphics proporciona muchas herramientas mas. Las siguientes dos herramientas que presentaremos son los colores y las fi guras rellenas. El color agrega otra dimension a los dibujos que ve un usuario en la pantalla de la computadora. Las fi guras rellenas cubren regiones completas con colores solidos, en vez de dibujar solo contornos. Los colores que se muestran en las pantallas de las computadoras se defi nen en base a sus componentes rojo, verde y azul. Estos componentes, llamados valores RGB, tienen valores enteros de 0 a 255. Entre mas alto sea el valor de un componente especifi co, mas intensidad de color tendra esa fi gura. Java utiliza la clase Color en el paquete java.awt para representar colores usando sus valores RGB. Por conveniencia, el objeto Color contiene 13 objetos static Color predefi nidos: Color.BLACK, Color.BLUE, Color.CYAN, Color.DARK_GRAY, Color. GRAY, Color.GREEN, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.WHITE y Color.YELLOW. La clase Color tambien contiene un constructor de la forma:
public Color( int r, int g, int b )
de manera que podemos crear colores especfi cos, con slo especifi car valores para los componentes individuales rojo, verde y azul de un color. Los rectngulos y los valos rellenos se dibujan usando los mtodos fillRect y fillOval de Graphics, respectivamente. Estos dos mtodos tienen los mismos parmetros que sus contrapartes drawRect y drawOval sin relleno: los primeros dos parmetros son las coordenadas para la esquina superior izquierda de la fi gura, mientras que los otros dos parmetros determinan su anchura y su altura. El ejemplo de las fi guras 6.16 y 6.17 demuestra los colores y las fi guras rellenas, al dibujar y mostrar una cara sonriente amarilla (esto lo ver en su pantalla).
1 // Fig. 6.16: DibujarCaraSonriente.java 2 // Demuestra las figuras rellenas. 3 import java.awt.Color; 4 import java.awt.Graphics; 5 import javax.swing.JPanel; 6 7 public class DibujarCaraSonriente extends JPanel 8 { 9 public void paintComponent( Graphics g ) 10 { 11 super.paintComponent( g ); 12 13 // dibuja la cara 14 g.setColor( Color.YELLOW ); 15 g.fillOval( 10, 10, 200, 200 ); 16 17 // dibuja los ojos 18 g.setColor( Color.BLACK ); 19 g.fillOval( 55, 65, 30, 30 ); 20 g.fillOval( 135, 65, 30, 30 ); 21 22 // dibuja la boca 23 g.fillOval( 50, 110, 120, 60 ); 24 25 // convierte la boca en una sonrisa 26 g.setColor( Color.YELLOW ); 27 g.fillRect( 50, 110, 120, 30 ); 28 g.fillOval( 50, 120, 120, 40 ); 29 } // fin del mtodo paintComponent 30 } // fin de la clase DibujarCaraSonriente
Las instrucciones import en las lneas 3 a 5 de la fi gura 6.16 importan las clases Color, Graphics y JPanel. La clase DibujarCaraSonriente (lneas 7 a 30) utiliza la clase Color para especifi car los colores, y utiliza la clase Graphics para dibujar. La clase JPanel proporciona de nuevo el rea en la que vamos a dibujar. La lnea 14 en el mtodo paintComponent utiliza el mtodo setColor de Graphics para establecer el color actual para dibujar en Color.YELLOW. El mtodo setColor requiere un argumento, el Color a establecer como el color para dibujar. En este caso, utilizamos el objeto predefi nido Color.YELLOW. La lnea 15 dibuja un crculo con un dimetro de 200 para representar la cara; cuando los argumentos anchura y altura son idnticos, el mtodo fillOval dibuja un crculo. A continuacin, la lnea 18 establece el color en Color.BLACK, y las lneas 19 y 20 dibujan los ojos. La lnea 23 dibuja la boca como un valo, pero esto no es exactamente lo que queremos. Para crear una cara feliz, vamos a retocar la boca. La lnea 26 establece el color en Color.YELLOW, de manera que cualquier fi gura que dibujemos se mezcle con la cara. La lnea 27 dibuja un rectngulo con la mitad de altura que la boca. Esto borra la mitad superior de la boca, dejando slo la mitad inferior. Para crear una mejor sonrisa, la lnea 28 dibuja otro valo para cubrir ligeramente la porcin superior de la boca. La clase PruebaDibujarCaraSonriente (fi gura 6.17) crea y muestra un objeto JFrame que contiene el dibujo. Cuando se muestra el objeto JFrame, el sistema llama al mtodo paintComponent para dibujar la cara sonriente.
Ejercicios del ejemplo prctico de GUI y grfi cos 6.1 Usando el metodo fillOval, dibuje un tiro al blanco que alterne entre dos colores aleatorios, como en la fi gura 6.18. Use el constructor Color( int r, int g, int b ) con argumentos aleatorios para generar colores aleatorios. 6.2 Cree un programa para dibujar 10 fi guras rellenas al azar en colores, posiciones y tamanos aleatorios (fi gura 6.19). El metodo paintComponent debe contener un ciclo que itere 10 veces. En cada iteracion, el ciclo debe determinar si se dibujara un rectangulo o un ovalo relleno, crear un color aleatorio y elegir las coordenadas y las medidas al azar. Las coordenadas deben elegirse con base en la anchura y la altura del panel. Las longitudes de los lados deben limitarse a la mitad de la anchura o altura de la ventana. // Fig. 6.17: PruebaDibujarCaraSonriente.java // Aplicacin de prueba que muestra una cara sonriente. import javax.swing.JFrame;
public class PruebaDibujarCaraSonriente { public static void main( String args[] ) { DibujarCaraSonriente panel = new DibujarCaraSonriente(); JFrame aplicacion = new JFrame();
aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); aplicacion.add( panel ); aplicacion.setSize( 230, 250 ); aplicacion.setVisible( true ); } // fin de main } // fin de la clase PruebaDibujarCaraSonriente
Figura 6.18 | Un tiro al blanco con dos colores alternantes al azar.
Java para Principiantes - Instanciación de Una Clase - Referencia A Objeto - Métodos, Declaración de Métodos, Mensajes, Paso de Parámetros, Retorno de Valores, Constructores y Destructores