Java modografico

366 views
318 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
366
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Java modografico

  1. 1. Curso de Java Cápsulas FormativasModo gráfico. Dibujando en JavaTexto y fuentes.Ahora que podemos crear una ventana, vamos a empezar por escribir un texto enella. Crearemos una clase MiFrame que herede de JFrame. Para ello, además delos métodos anteriores, también tendremos que sobrescribir el métodopaint(Graphics g) que se hereda de java.awt.Component y allí especificaremoslo que queremos dibujar, o escribir.El método paint(Graphics g) es el encargado de pintar los componentes en lapantalla, de tal manera que será el método que se invoque cada vez que nuestraaplicación necesite ser redibujada. Por ejemplo, cuando pongamos otra ventanaencima y luego la quitemos, el trozo destruido de nuestra aplicación (el trozoocultado por la otra ventana) necesitará ser redibujado. De esto se encargasiempre dicho método.La particularidad de este método es que no lo llamaremos directamente medianteuna invocación corriente, sino que lo haremos a través de una llamada al métodorepaint(), que será el encargado de hacer los cálculos pertinentes para reparar lazona de pantalla que ha sido destruida y hacer así que sólo se redibuje lonecesario; ganando así en velocidad de refresco y evitando efectos de parpadeo.La manera de escribir texto (y dibujar) consiste en manipular el parámetro de tipoGraphics 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 );} }); } }Jesús Cáceres Tello Pág. 1 - 7
  2. 2. Curso de Java Cápsulas Formativas Ejecución de la clase MiFrameEl método drawString(...) tiene tres parámetros, el String, y las coordenadas x ey. Estas coordenadas se consideran a partir de la esquina superior izquierda. Cadavez que se tiene que refrescar la pantalla, Java llama al método update() (de laclase Component), que borra la pantalla y luego éste llama a paint(), que es dondedefinimos 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 tamaño.Luego asignaremos esta fuente al entorno gráfico.Font f = new Font("Times Roman", Font.BOLD + Font.ITALIC, 12);g.setFont(f);Los estilos permitidos, definidos como constantes estáticas de la clase Font, son: • Font.PLAIN, • Font.BOLD, • Font.ITALIC • Font.BOLD + Font.ITALICUna vez hemos definido la fuente que utilizamos, podemos recurrir a la claseFontMetrics para averiguar el tamaño que ocuparán las letras en nuestra ventana(en pixels). FontMetrics fm = g.getFontMetrics(f);Los métodos que encontraremos en la clase FontMetrics:Jesús Cáceres Tello Pág. 2 - 7
  3. 3. Curso de Java Cápsulas Formativas • int getAscent (): distancia baseline basta la altura de las mayúsculas. • int getDescent (): distancia baseline hasta profundidad de los caracteres que descienden. • int getLeading(): espacio mínimo entre líneas. • int qetHeighc(): distancia entre dos líneas (descent + leading + ascent). • int getMaxAscent(): ascent máximo. • int getMaxDescent(): descent máximo. • int stringWidth(String st): anchura de un string dado. Resultado de seleccionar un tipo de letra para el objeto GraphicsLíneas.Las líneas en Java se dibujan con el método drawLine(...). En el ejemplo anteriorsólo habría que añadir una instrucción al método paint(). g.drawLine(5, 10,30,50);Los parámetros son cuatro valores enteros (int) que corresponden respectivamentea las coordenadas x e y iniciales y finales.Rectángulos.También existe un método específico para los rectángulos (hay que recordar que elcuadrado es un caso particular del rectángulo). g.drawRect (x,y, anchura,altura);Las variables x e y determinan la esquina superior izquierda y las otras dos laanchura y altura del rectángulo. Los cuatro valores son de tipo int. Hay otrosmétodos que dibujan un rectángulo con las esquinas redondeadas, rectángulo entres dimensiones y para que el rectángulo 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)Jesús Cáceres Tello Pág. 3 - 7
  4. 4. Curso de Java Cápsulas FormativasPolígonos.Existe una función drawPolygon(...), pero no es tan sencilla de usar como losrectángulos ya que el parámetro que recibe es un polígono o los arrays con lascoordenadas. • void drawPolygon(Polygon P). • void drawPolygon(int[] xCoords, int [] yCoords, int n)xCoords son las coordenadas x de los vértices, yCoords son las coordenadas y delos vértices y n es el número de vértices.Se dibujarán líneas 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 polígono es un conjunto de segmentos que se cierra automáticamente. Con estoquiero decir que para dibujar un triángulo, por ejemplo, sólo hay que dar lascoordenadas de los tres vértices 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 elfin respectivamente del segmento que cierra el polígono.Para definir un polígono usamos el constructor y luego añadimos los puntos uno auno.Polygon p = new Polygon();p.addPoint(x,y)También encontramos una función fillPolygon(...) con el mismo comportamientoque las que hemos visto para los rectángulos.Óvalos.Existe un método para dibujar elipses (y circunferencias), aunque Java lasdenomina óvalos. void drawOval(int x, int y, int anchura, int altura)Los cuatro parámetros del óvalo son las que delimitan el rectángulo quecircunscribe la elipse. También existe el método fillOval(...).Arcos.La última forma geométrica que nos permite dibujar Java son los arcos.Jesús Cáceres Tello Pág. 4 - 7
  5. 5. Curso de Java Cápsulas Formativasvoid drawArc(int x, int y, int anchura, int altura, int anguloInicial,intarcoAngulo)Los cuatro primeros valores definen el rectángulo como en los óvalos, los dosúltimos son el ángulo inicial y el ángulo del arco (relativo al ángulo inicial). Elrectángulo es donde se encuadra el arco, el parámetro de anguloInicial indicaposición desde qué posición se empieza a dibujar el arco y el arcoAngulo indica laporción de arco que hay que dibujar.Por ejemplo, para dibujar una semicircunferencia, el rectángulo deberá ser uncuadrado, a continuación fijar el ángulo inicial y luego decirle que dibuje 180grados.Cuando usamos el método fillArc(...), la figura rellenada es el sector de la elipsedelimitado por el arco y las líneas imaginarias que irían desde el centro de la elipsehasta los extremos del arco.Colores.El texto que escribimos o las formas y figuras que dibujamos aparecen en el colorque haya definido. Este color lo podemos modificar a nuestro gusto gracias almétodo setColor(...) de la clase Graphics, que recibe un parámetro 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 susvalores RGB. Color o = new Color(r,g,b)Podemos cambiar el color de escritura de nuestra variable de gráficos y el color defondo de nuestro contenedor (en nuestro ejemplo el Frame). g.setColor(Color.red) setBackground(Color.white);Jesús Cáceres Tello Pág. 5 - 7
  6. 6. Curso de Java Cápsulas 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 líneas g.setColor(Color.red); g.drawLine(24,135,265,135); g.setColor(Color.blue); g.drawLine(24,175,265,175); // Dibujamos un rectángulo g.setColor(Color.black); g.drawRect(12,119,265,70); // Dibujamos un triángulo (polígono) 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 );} }); } }Jesús Cáceres Tello Pág. 6 - 7
  7. 7. Curso de Java Cápsulas FormativasEl código anterior tiene un error, encuéntralo y subsánalo para que la salida sea tanespectacular con la que se muestra a continuación. Ejecución del código anteriorJesús Cáceres Tello Pág. 7 - 7

×