gentoo linux, java, software libre y otras hierbas
Dic, 11 2007 - 2:20 pm

[código] Programación en Java – Gráficos y Java2D (3)

(anterior) En esta sección de tratan los contextos y objetos gráficos; el dibujo de cadenas, caracteres y bytes; el control de color y tipo de letra; la manipulación de la pantallas, los modos de pantalla y el dibujo de líneas, rectángulos, rectángulos redondeados, rectángulos tridimensionales, óvalos, arcos y polígonos. Se presenta la API de Java2D, la cual ofrece poderosas herramientas para gráficos.

Dibujo de arcos (drawArc)

// Dibujo de arcos.
import java.awt.*;
import javax.swing.*;

public class DibujarArcos extends JFrame {

   // establecer cadena de barra de título y dimensiones de la ventana
   public DibujarArcos()
   {
      super( "Dibujo de arcos" );

      setSize( 300, 170 );
      setVisible( true );
   }

   // dibujar rectángulos y arcos
   public void paint( Graphics g )
   {
      super.paint( g );  // llamar al método paint de la superclase

      // empezar en 0 y extenderse hasta 360 grados
      g.setColor( Color.YELLOW );
      g.drawRect( 15, 35, 80, 80 );
      g.setColor( Color.RED );
      g.drawArc( 15, 35, 80, 80, 0, 360 );

      // empezar en 0 y extenderse hasta 110 grados
      g.setColor( Color.YELLOW );
      g.drawRect( 100, 35, 80, 80 );
      g.setColor( Color.RED );
      g.drawArc( 100, 35, 80, 80, 0, 110 );

      // empezar en 0 y extenderse hasta -270 grados
      g.setColor( Color.YELLOW );
      g.drawRect( 185, 35, 80, 80 );
      g.setColor( Color.RED );
      g.drawArc( 185, 35, 80, 80, 0, -270 );

      // empezar en 0 y extenderse hasta 360 grados
      g.fillArc( 15, 120, 80, 40, 0, 360 );

      // empezar en 0 y extenderse hasta -90 grados
      g.fillArc( 100, 120, 80, 40, 270, -90 );

      // empezar en 0 y extenderse hasta -270 grados
      g.fillArc( 185, 120, 80, 40, 0, -270 );

   } // fin del método paint

   // ejecutar la aplicación
   public static void main( String args[] )
   {
      JFrame.setDefaultLookAndFeelDecorated(true);
      DibujarArcos aplicacion = new DibujarArcos();
      aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }

} // fin de la clase DibujarArcos


Descargar código fuente

Dibujo de Polígonos (Polygon, drawPolygon, drawPolyLine)

// Dibujo de polígonos.
import java.awt.*;
import javax.swing.*;

public class DibujarPoligonos extends JFrame {

   // establecer cadena de barra de título y dimensiones de la ventana
   public DibujarPoligonos()
   {
      super( "Dibujo de polígonos" );

      setSize( 275, 230 );
      setVisible( true );
   }

   // dibujar polígonos y polilíneas
   public void paint( Graphics g )
   {
      super.paint( g );  // llamar al método paint de la superclase

      int valoresX[] = { 20, 40, 50, 30, 20, 15 };
      int valoresY[] = { 50, 50, 60, 80, 80, 60 };
      Polygon poligono1 = new Polygon( valoresX, valoresY, 6 );

      g.drawPolygon( poligono1 );

      int valoresX2[] = { 70, 90, 100, 80, 70, 65, 60 };
      int valoresY2[] = { 100, 100, 110, 110, 130, 110, 90 };

      g.drawPolyline( valoresX2, valoresY2, 7 );

      int valoresX3[] = { 120, 140, 150, 190 };
      int valoresY3[] = { 40, 70, 80, 60 };

      g.fillPolygon( valoresX3, valoresY3, 4);

      Polygon poligono2 = new Polygon();
      poligono2.addPoint( 165, 135 );
      poligono2.addPoint( 175, 150 );
      poligono2.addPoint( 270, 200 );
      poligono2.addPoint( 200, 220 );
      poligono2.addPoint( 130, 180 );

      g.fillPolygon( poligono2 );

   } // fin del método paint

   // ejecutar la aplicación
   public static void main( String args[] )
   {
      JFrame.setDefaultLookAndFeelDecorated(true);
      DibujarPoligonos aplicacion = new DibujarPoligonos();
      aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }

} // fin de la clase DibujarPoligonos


Descargar código fuente

Demostración de algunas figuras de Java2D

// Demostración de algunas figuras de Java2D.
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import javax.swing.*;

public class Figuras extends JFrame {

   // establecer cadena de barra de título y dimensiones de la ventana
   public Figuras()
   {
      super( "Dibujo de figuras en 2D" );

      setSize( 425, 160 );
      setVisible( true );
   }

   // dibujar figuras con la API Java2D
   public void paint( Graphics g )
   {
      super.paint( g );  // llamar al método paint de la superclase

      Graphics2D g2d = ( Graphics2D ) g;  // convertir g a Graphics2D

      // dibujar elipse 2D rellena con un gradiente azul-amarillo
      g2d.setPaint( new GradientPaint( 5, 30, Color.BLUE, 35, 100,
         Color.YELLOW, true ) );
      g2d.fill( new Ellipse2D.Double( 5, 30, 65, 100 ) );

      // dibujar rectángulo 2D en rojo
      g2d.setPaint( Color.RED );
      g2d.setStroke( new BasicStroke( 10.0f ) );
      g2d.draw( new Rectangle2D.Double( 80, 30, 65, 100 ) );

      // dibujar rectángulo 2D redondeado con fondo tamponado
      BufferedImage buffImage = new BufferedImage( 10, 10,
         BufferedImage.TYPE_INT_RGB );

      Graphics2D gg = buffImage.createGraphics();
      gg.setColor( Color.YELLOW ); // dibujar en amarillo
      gg.fillRect( 0, 0, 10, 10 ); // dibujar un rectángulo relleno
      gg.setColor( Color.BLACK );  // dibujar en negro
      gg.drawRect( 1, 1, 6, 6 );   // dibujar un rectángulo
      gg.setColor( Color.BLUE );   // dibujar en azul
      gg.fillRect( 1, 1, 3, 3 );   // dibujar un rectángulo relleno
      gg.setColor( Color.RED );    // dibujar en rojo
      gg.fillRect( 4, 4, 3, 3 );   // dibujar un rectángulo relleno

      // pintar buffImage en el objeto JFrame
      g2d.setPaint( new TexturePaint( buffImage,
         new Rectangle( 10, 10 ) ) );
      g2d.fill( new RoundRectangle2D.Double( 155, 30, 75, 100, 50, 50 ) );

      // dibujar arco 2D en forma de pastel, en color blanco
      g2d.setPaint( Color.WHITE );
      g2d.setStroke( new BasicStroke( 6.0f ) );
      g2d.draw( new Arc2D.Double( 240, 30, 75, 100, 0, 270, Arc2D.PIE ) );

      // dibujar líneas 2D en verde y amarillo
      g2d.setPaint( Color.GREEN );
      g2d.draw( new Line2D.Double( 395, 30, 320, 150 ) );

      float guiones[] = { 10 };

      g2d.setPaint( Color.YELLOW );
      g2d.setStroke( new BasicStroke( 4, BasicStroke.CAP_ROUND,
         BasicStroke.JOIN_ROUND, 10, guiones, 0 ) );
      g2d.draw( new Line2D.Double( 320, 30, 395, 150 ) );

   } // fin del método paint

   // ejecutar la aplicación
   public static void main( String args[] )
   {
      JFrame.setDefaultLookAndFeelDecorated(true);
      Figuras aplicacion = new Figuras();
      aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }

} // fin de la clase Figuras


Descargar código fuente

Demostración de una ruta general (GeneralPath)

// Demostración de una ruta general.
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

public class Figuras2 extends JFrame {

   // establecer cadena de barra de título, color de fondo y dimensiones de la ventana
   public Figuras2()
   {
      super( "Dibujo de figuras 2D" );

      getContentPane().setBackground( Color.RED );
      setSize( 400, 400 );
      setVisible( true );
   }

   // dibujar rutas generales
   public void paint( Graphics g )
   {
      super.paint( g );  // llamar al método paint de la superclase

      int puntosX[] = { 55, 67, 109, 73, 83, 55, 27, 37, 1, 43 };
      int puntosY[] = { 0, 36, 36, 54, 96, 72, 96, 54, 36, 36 };

      Graphics2D g2d = ( Graphics2D ) g;
      GeneralPath estrella = new GeneralPath();  // crear objeto GeneralPath

      // establecer la coordenada inicial de la ruta general
      estrella.moveTo( puntosX[ 0 ], puntosY[ 0 ] );

      // crear la estrella--esto no la dibuja
      for ( int cuenta = 1; cuenta < puntosX.length; cuenta++ )
         estrella.lineTo( puntosX[ cuenta ], puntosY[ cuenta ] );

      estrella.closePath();  // cerrar la figura

      g2d.translate( 200, 200 );  // trasladar el origen a (200, 200)

      // girar alrededor del origen y dibujar estrellas en colores aleatorios
      for ( int cuenta = 1; cuenta <= 20; cuenta++ ) {
         g2d.rotate( Math.PI / 10.0 );  // girar el sistema de coordenadas

         // establecer color de dibujo al azar
         g2d.setColor( new Color( ( int ) ( Math.random() * 256 ),
            ( int ) ( Math.random() * 256 ),
            ( int ) ( Math.random() * 256 ) ) );

         g2d.fill( estrella );  // dibujar estrella rellena
      }

   } // fin del método paint

   // ejecutar la aplicación
   public static void main( String args[] )
   {
      JFrame.setDefaultLookAndFeelDecorated(true);
      Figuras2 aplicacion = new Figuras2();
      aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }

} // fin de la clase Figuras2


Descargar código fuente

Etiquetas: hack, java, programación
Los ejercicios utilizados en este post están basados en ejemplos del libro Cómo programar en Java de Deitel, y por lo tanto están bajo la licencia que esta editorial disponga.

6 Comentarios | deja el tuyo

6 Comentarios en “[código] Programación en Java – Gráficos y Java2D (3)”

  1. DaViD dice:

    emmm y komo puedo hacer graficos pero en 3D
    Tambien komo puedo hacer un programa que me dibuje sobre algo komo cooredenadas de derivadas

  2. Cristian dice:

    Nunca he trabajado con cosas en 3D, aunque conozco algunos ejemplos bastante buenos que puedes encontrar en la carpeta “demo” de la instalación del JDK.

    Un saludo.

  3. Harry Haller dice:

    Estupendo, salvo un pequeño (o gran) detalle. Cuando se trabaja con swing, a diferencia de AWT, se recomienda sobreescribir el método “paintComponent”, no el “paint”.

    En swing “paint” hace una llamada a paintComponent, paintBorder y paintChildren. Del modo que está hecho estarías eliminando dichas llamadas y no implementándolo correctamente.

    Un saludo.
    Pepinho.

  4. Gustavo dice:

    Mil gracias por cada aporte

  5. dav dice:

    alguien tiene un programa para dibujar figuras pero en c++??’

¡Déjanos tu comentario!