[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
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
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
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
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



emmm y komo puedo hacer graficos pero en 3D
Tambien komo puedo hacer un programa que me dibuje sobre algo komo cooredenadas de derivadas
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.
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.
Mil gracias por cada aporte
alguien tiene un programa para dibujar figuras pero en c++??’
gracias por el ejempo