Está en la página 1de 7

Curso de Java

Cpsulas Formativas



Jess Cceres Tello Pg. 1 - 7


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


Curso de Java

Cpsulas Formativas



Jess Cceres Tello Pg. 2 - 7





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:


Curso de Java

Cpsulas Formativas



Jess Cceres Tello Pg. 3 - 7

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)



Curso de Java

Cpsulas Formativas



Jess Cceres Tello Pg. 4 - 7






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.



Curso de Java

Cpsulas Formativas



Jess Cceres Tello Pg. 5 - 7

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


Curso de Java

Cpsulas Formativas



Jess Cceres Tello Pg. 6 - 7

















































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



Curso de Java

Cpsulas Formativas



Jess Cceres Tello Pg. 7 - 7






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

También podría gustarte