Está en la página 1de 7

Curso de Java Cpsulas Formativas

Modo grfico. Dibujando en Java


Texto y fuentes. Ahora que podemos crear una ventana, vamos a empezar por escribir un texto en ella. Crearemos una clase MiFrame que herede de JFrame. Para ello, adems de los mtodos anteriores, tambin tendremos que sobrescribir el mtodo paint(Graphics g) que se hereda de java.awt.Component y all especificaremos lo que queremos dibujar, o escribir. El mtodo paint(Graphics g) es el encargado de pintar los componentes en la pantalla, de tal manera que ser el mtodo que se invoque cada vez que nuestra aplicacin necesite ser redibujada. Por ejemplo, cuando pongamos otra ventana encima y luego la quitemos, el trozo destruido de nuestra aplicacin (el trozo ocultado por la otra ventana) necesitar ser redibujado. De esto se encarga siempre dicho mtodo. La particularidad de este mtodo es que no lo llamaremos directamente mediante una invocacin corriente, sino que lo haremos a travs de una llamada al mtodo repaint(), que ser el encargado de hacer los clculos pertinentes para reparar la zona de pantalla que ha sido destruida y hacer as que slo se redibuje lo necesario; ganando as en velocidad de refresco y evitando efectos de parpadeo. La manera de escribir texto (y dibujar) consiste en manipular el parmetro de tipo Graphics que recibe. Por ejemplo
import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MiFrame extends JFrame { public MiFrame() { super("Hola mundo con ventanas!"); setBackground(Color.orange); setSize(300,300); setVisible(true); } public void paint(Graphics g) { g.drawString("Tenemos el mejor profe de Java",40,160); } public static void main(String args[]) { MiFrame mf = new MiFrame(); mf.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent evt ){ System.exit( 0 );} });

Jess Cceres Tello

Pg. 1 - 7

Curso de Java Cpsulas Formativas

Ejecucin de la clase MiFrame

El mtodo drawString(...) tiene tres parmetros, el String, y las coordenadas x e y. Estas coordenadas se consideran a partir de la esquina superior izquierda. Cada vez que se tiene que refrescar la pantalla, Java llama al mtodo update() (de la clase Component), que borra la pantalla y luego ste llama a paint(), que es donde definimos usualmente lo que deseamos dibujar. Cuando escribimos con la llamada a drawString(...), la fuente usada es la que est activa. Podemos definir una fuente con el tipo de letra, el estilo y el tamao. Luego asignaremos esta fuente al entorno grfico. Font f = new Font("Times Roman", Font.BOLD + Font.ITALIC, 12); g.setFont(f); Los estilos permitidos, definidos como constantes estticas de la clase Font, son: Font.PLAIN, Font.BOLD, Font.ITALIC Font.BOLD + Font.ITALIC

Una vez hemos definido la fuente que utilizamos, podemos recurrir a la clase FontMetrics para averiguar el tamao que ocuparn las letras en nuestra ventana (en pixels). FontMetrics fm = g.getFontMetrics(f); Los mtodos que encontraremos en la clase FontMetrics:

Jess Cceres Tello

Pg. 2 - 7

Curso de Java Cpsulas Formativas


int getAscent (): distancia baseline basta la altura de las maysculas. int getDescent (): distancia baseline hasta profundidad de los caracteres que descienden. int getLeading(): espacio mnimo entre lneas. int qetHeighc(): distancia entre dos lneas (descent + leading + ascent). int getMaxAscent(): ascent mximo. int getMaxDescent(): descent mximo. int stringWidth(String st): anchura de un string dado.

Resultado de seleccionar un tipo de letra para el objeto Graphics

Lneas. Las lneas en Java se dibujan con el mtodo drawLine(...). En el ejemplo anterior slo habra que aadir una instruccin al mtodo paint(). g.drawLine(5, 10,30,50); Los parmetros son cuatro valores enteros (int) que corresponden respectivamente a las coordenadas x e y iniciales y finales. Rectngulos. Tambin existe un mtodo especfico para los rectngulos (hay que recordar que el cuadrado es un caso particular del rectngulo). g.drawRect (x,y, anchura,altura); Las variables x e y determinan la esquina superior izquierda y las otras dos la anchura y altura del rectngulo. Los cuatro valores son de tipo int. Hay otros mtodos que dibujan un rectngulo con las esquinas redondeadas, rectngulo en tres dimensiones y para que el rectngulo aparezca relleno. void drawRoundRect(int x, int y, int width, int height, int arcwidtri, int arcHeight) void draw3DRect(int x, int y, int width, int heiqht, boolean raised) void fillRect(int x, int y, int width, int heiqht) void fillRoundRect(int x, int y, int widch, int heiqht, int arcwidth, int arcHeight)

void fill3DRect(int x, int y, int width, int height, boolean raised)

Jess Cceres Tello

Pg. 3 - 7

Curso de Java Cpsulas Formativas

Polgonos. Existe una funcin drawPolygon(...), pero no es tan sencilla de usar como los rectngulos ya que el parmetro que recibe es un polgono o los arrays con las coordenadas. void drawPolygon(Polygon P). void drawPolygon(int[] xCoords, int [] yCoords, int n)

xCoords son las coordenadas x de los vrtices, yCoords son las coordenadas y de los vrtices y n es el nmero de vrtices. Se dibujarn lneas de tal manera que queden con los puntos (xCoords[i], yCords[i]) de punto incial y de punto final (xCoords[i+1], yCords[i+1]). El polgono es un conjunto de segmentos que se cierra automticamente. Con esto quiero decir que para dibujar un tringulo, por ejemplo, slo hay que dar las coordenadas de los tres vrtices y el sistema ya sabe que tiene que interpretar el ltimo par de coordenadas y el primer par de coordenadas dados como el inicio y el fin respectivamente del segmento que cierra el polgono. Para definir un polgono usamos el constructor y luego aadimos los puntos uno a uno. Polygon p = new Polygon(); p.addPoint(x,y) Tambin encontramos una funcin fillPolygon(...) con el mismo comportamiento que las que hemos visto para los rectngulos. valos. Existe un mtodo para dibujar elipses (y circunferencias), aunque Java las denomina valos. void drawOval(int x, int y, int anchura, int altura) Los cuatro parmetros del valo son las que delimitan el rectngulo que circunscribe la elipse. Tambin existe el mtodo fillOval(...). Arcos. La ltima forma geomtrica que nos permite dibujar Java son los arcos.

Jess Cceres Tello

Pg. 4 - 7

Curso de Java Cpsulas Formativas


void drawArc(int x, int y, int anchura, int altura, int anguloInicial,int arcoAngulo)

Los cuatro primeros valores definen el rectngulo como en los valos, los dos ltimos son el ngulo inicial y el ngulo del arco (relativo al ngulo inicial). El rectngulo es donde se encuadra el arco, el parmetro de anguloInicial indica posicin desde qu posicin se empieza a dibujar el arco y el arcoAngulo indica la porcin de arco que hay que dibujar. Por ejemplo, para dibujar una semicircunferencia, el rectngulo deber ser un cuadrado, a continuacin fijar el ngulo inicial y luego decirle que dibuje 180 grados. Cuando usamos el mtodo fillArc(...), la figura rellenada es el sector de la elipse delimitado por el arco y las lneas imaginarias que iran desde el centro de la elipse hasta los extremos del arco. Colores. El texto que escribimos o las formas y figuras que dibujamos aparecen en el color que haya definido. Este color lo podemos modificar a nuestro gusto gracias al mtodo setColor(...) de la clase Graphics, que recibe un parmetro de tipo Color. Hay unas constantes en la clase Color que tienen definidos los valores black , blue, cyan, darkGray, gray, green, lightcray, magenta, orange, pink, red, white y yellow. Si estos colores no nos bastan, podemos crear nuestro propio color a partir de sus valores RGB. Color o = new Color(r,g,b) Podemos cambiar el color de escritura de nuestra variable de grficos y el color de fondo de nuestro contenedor (en nuestro ejemplo el Frame). g.setColor(Color.red) setBackground(Color.white);

Jess Cceres Tello

Pg. 5 - 7

Curso de Java Cpsulas Formativas

import javax.swing.*; import java.awt.*; public class MiFrame extends JFrame { public MiFrame() { super("Hola mundo con ventanas!"); setSize(300,300); setVisible(true); } public void paint(Graphics g) { // Cambiamos el color del fondo del framse getContentPane().setBackground(Color.white); // Dibujamos texto Font f = new Font("Arial", Font.BOLD + Font.ITALIC, 14); g.setFont(f); g.drawString("Tenemos los mejores profes de Java",24,160); // Dibujamos lneas g.setColor(Color.red); g.drawLine(24,135,265,135); g.setColor(Color.blue); g.drawLine(24,175,265,175); // Dibujamos un rectngulo g.setColor(Color.black); g.drawRect(12,119,265,70); // Dibujamos un tringulo (polgono) int[] xCoords = new int[4]; int[] yCoords = new int[4]; xCoords[0]=150; yCoords[0]=35; xCoords[1]=100; yCoords[1]=100; xCoords[2]=200; yCoords[2]=100; g.setColor(Color.green); g.drawPolygon(xCoords,yCoords,3); // Dibujamos valos g.setColor(Color.orange); g.fillOval(107,200,85,85); g.setColor(Color.black); g.drawOval(120,220,20,10); g.drawOval(158,220,20,10); // Dibujamos un arco g.drawArc(128,235,40,35,190,160); } public static void main(String args[]) { MiFrame mf = new MiFrame(); mf.repaint(); mf.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent evt ){ System.exit( 0 );} }); } } Jess Cceres Tello Pg. 6 - 7

Curso de Java Cpsulas Formativas

El cdigo anterior tiene un error, encuntralo y subsnalo para que la salida sea tan espectacular con la que se muestra a continuacin.

Ejecucin del cdigo anterior

Jess Cceres Tello

Pg. 7 - 7

También podría gustarte