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

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.

14 Comentarios | deja el tuyo

14 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++??’

  6. francisco dice:

    que alguien me ayude con unos codigos de un pino asea un dibujo de un pino o q al ejecutar el codigo aparesca un pino porfa es q me dejaron de tarea. y el otra programa que quiero o codigo esq ma vaya trazando linea o asterisco formando un marco en la pantalla pero que se vea formandose. y la otra un codigo en donde un asterisco o l etra o lo q sea se vea recorriendo una linea que va y se regresa. y por ultimo un codigo en donde dos puntos o lo q sea en donde compiten como una carrera de autos si me entienden. porfa los codigo q sea en java.applet pero q sea en java,saludos .dtb.
    y si me podria mandar en mi correo les agradeceria mucho.gracias. mi correo es fraal2_05@hotmail.com

  7. areizero dice:

    Exelente aporte, eh aprendido a dibujar muy facilmente ^^
    El problema ahora, ¿como aplicar todo esto en un metodo aparte de paint, para dibujar varios nodos?

  8. luzcely dice:

    pssssss
    la verdad ayudo mucho este codigo para terminar un programa que tava aciendo y psssssss
    ya no voy a pensar tanto
    vale gracias por la salvadita.

    >>>>>>>lo q uno se puede encontrar en internet jeeje<<<<<<<<<
    vale gracias de nues

  9. jose dice:

    KIERO REALIZAR UNEDITOR DE PLANOS EN EN JAVA

¡Déjanos tu comentario!