Dibujar lineas en Java

   Dibujar en java no es fácil, pero tampoco es cosa difícil, cosa del otro mundo. Lo mas fácil es dibujar líneas, para ello lo que hacemos es cargar al método gráfico el color, el tipo de línea, el tamaño y cualquier otra cosa que se nos ocurra para darle estilo a nuestro dibujo.

// Dibujo de líneas, rectángulos y óvalos.
import java.awt.*;
import javax.swing.*;

public class LineasRectsOvalos extends JFrame {

// establecer la cadena de la barra de título y dimensiones de la ventana
public LineasRectsOvalos()
{
super( "Dibujo de líneas, rectángulos y óvalos" );

setSize( 400, 165 );
setVisible( true );
}

// mostrar varias líneas, rectángulos y óvalos
public void paint( Graphics g )
{
super.paint( g );  // llamar al método paint de la superclase

g.setColor( Color.RED );
g.drawLine( 5, 30, 350, 30 );

g.setColor( Color.BLUE );
g.drawRect( 5, 40, 90, 55 );
g.fillRect( 100, 40, 90, 55 );

g.setColor( Color.CYAN );
g.fillRoundRect( 195, 40, 90, 55, 50, 50 );
g.drawRoundRect( 290, 40, 90, 55, 20, 20 );

g.setColor( Color.YELLOW );
g.draw3DRect( 5, 100, 90, 55, true );
g.fill3DRect( 100, 100, 90, 55, false );

g.setColor( Color.MAGENTA );
g.drawOval( 195, 100, 90, 55 );
g.fillOval( 290, 100, 90, 55 );

} // fin del método paint

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

} // fin de la clase LineasRectsOvalos

   Este ejemplo fue visto en: CasiDiablo.net

15 Comentarios

Escribir Comentario
Anónimo
AUTOR
17 de julio de 2010, 10:53 delete

la cagaste con el
//JFrame.setDefaultLookAndFeelDecorated(true);

xD!!

Responder
avatar
_CarlitoX_
AUTOR
17 de julio de 2010, 12:04 delete

Mmmmm.... No entiendo ese comentario puesto que solo es el look and feel....

Responder
avatar
Anónimo
AUTOR
17 de febrero de 2011, 2:59 delete

Merci d'avoir un blog interessant

Responder
avatar
Anónimo
AUTOR
28 de marzo de 2011, 8:30 delete

muy buen ejemplo, gracias!

Responder
avatar
Anónimo
AUTOR
2 de febrero de 2012, 0:45 delete

gracias me sirvio mucho tu codigo.

saludos

Responder
avatar
Anónimo
AUTOR
17 de marzo de 2012, 14:41 delete

exelnte aporte de gran ayuda

Responder
avatar
Anónimo
AUTOR
24 de marzo de 2012, 14:08 delete

Me agrado mucho tu aporte la verdad esta muy bien pero yo tengo una duda espero y me puedas aclarar algo, yo tengo un programa que permite dibujar o simplemente escribir con el mouse mediante eventos, pero le quiero añadir un boton para que borre lo que se dibuje y poder volver a dibujar...la verdad parece facil pero me estoy dando de topes con eso, dejo el codigo acontinuacion por si no me supe explicar muy bien



import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.Line2D;
import java.util.ArrayList;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class Dibujar extends JComponent {

private Point inicioArrastre;
private Point finArrastre;
private ArrayList lineas = new ArrayList();

public Dibujar() {
super();
addMouseListener(new MouseAdapter() {

public void mousePressed(MouseEvent e) { // cuando se presiona el mouse
inicioArrastre = new Point(e.getX(), e.getY());
repaint();
}

public void mouseReleased(MouseEvent e) { // cuando se deja de presionar el mouse
finArrastre = new Point(e.getX(), e.getY());
Shape linea = crearLinea(inicioArrastre.x, inicioArrastre.y, finArrastre.x, finArrastre.y);
lineas.add(linea);
repaint();
}
});
addMouseMotionListener(new MouseMotionAdapter() {

public void mouseDragged(MouseEvent e) { // cuando se esta arrastrando el mouse
finArrastre = new Point(e.getX(), e.getY());
Shape linea = crearLinea(inicioArrastre.x, inicioArrastre.y, finArrastre.x, finArrastre.y);
lineas.add(linea);
inicioArrastre = new Point(finArrastre.x, finArrastre.y);
repaint();
}
});
}

public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.RED);
for (Shape linea : lineas) { // dibuja todos las elipses
g2.draw(linea);
}
}

private Line2D.Float crearLinea(int x1, int y1, int x2, int y2) {
return new Line2D.Float(x1, y1, x2, y2);
}

public static void main(String[] a3d) {
JFrame ventana = new JFrame("Dibujar");
ventana.setSize(400, 300);
ventana.setLocationRelativeTo(null);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ventana.add(new Dibujar());
ventana.setVisible(true);
}
}


de antemano gracias

Responder
avatar
26 de marzo de 2012, 7:50 delete

Hola, disculpa la tardanza, bueno, lo primero que veo es que tienes 2 Mouse Listener, podrías unir el Drag, Pressed y Released en uno solo. Lo otro y mas simple que se me ocurre es que trabajes bajo un Panel en ves de un Frame, entonces te creas un método para limpiar el panel cada vez que lo requieres, algo como esto:

void limpiar(JPanel contenido){
contenido.removeAll();
contenido.repaint();
}

Donde "contenido" es el JPanel que envías por parámetro, ya luego te queda cargar de nuevo el componente, te recomiendo utilizar una clase que inicialice todo para no recargar una y otra vez este método, algo así:

/*EN EL PRINCIPAL (MAIN)*/
JFrame ventana = new JFrame ("Dibujar");
JPanel contenido = new JPanel();
ventana.setSize(400, 300);
ventana.setLocationRelativeTo(null);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ventana.add(contenido);
CargaComponentes();

void CargaComponentes(){
contenido.add(new Dibujar());
contenido.setVisible(true);
}

Así al limpiar el panel haces esto y listo:

public void limpiar(JPanel panel){
panel.removeAll();
panel.repaint();
CargaComponentes();
}

Recuerda setear el tamaño del panel o maximizarlo al mismo tamaño del frame para que se vea que es uno solo.... Saludos!!

Responder
avatar
Anónimo
AUTOR
22 de julio de 2012, 13:29 delete

¡Hola!
Estoy programando desde Eclipse Indigo, utilizo Swing.
¿Cómo puedo hacer para que aparezca una linea cuando se seleccione una checkbox?
Tengo varios checkbox con sus correspondientes lineas, puedo dibujar las lineas por separado :
public void paint( Graphics g )
{
super.paint( g );
g.setColor( Color.BLACK);
g.drawLine( 75, 475, 75, 360 );
g.drawLine( 75,475,100,360);
}
pero no puedo incluirlo en el evento de click en el checkbox.

Si aplico repaint() en dicho evento, es solo una actualización, ¿podría de alguna forma ocultarla segun la creo y después mostrarla?

Responder
avatar
Anónimo
AUTOR
22 de julio de 2012, 13:30 delete

¡¡Muchas gracias de antemano!!

Responder
avatar
23 de julio de 2012, 9:44 delete

Buena pregunta, ya está publicado en la nueva entrada, cualquier duda comenta.

Enlace: http://carlitoxenlaweb.blogspot.com/2012/07/dibujar-lineas-con-jcheckbox.html

Responder
avatar
nancy
AUTOR
19 de enero de 2014, 21:21 delete

ola me podrias ayudar xf como de hacen mas gruesas las lineas???

Responder
avatar
nancy
AUTOR
19 de enero de 2014, 21:23 delete

hola, como se hacen mas gruesas laas lineas (codigo) xf

Responder
avatar
21 de enero de 2014, 19:00 delete

Esto es AWT con Graphics básico, deberías utilizar para eso Graphics2D, acá la doc, si necesitas algo en específico házmelo saber para publicar algo sobre ello.... Saludos!!!

http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html

Responder
avatar
29 de marzo de 2014, 1:15 delete

Ya respondí esta pregunta, pero aquí va de nuevo, debes re-dibujar el método paint (enlace que comente anteriormente):

public void paint (Graphics g) {
if (g instanceof Graphics2D) {
Graphics2D g2 = (Graphics2D)g;
g2.setStroke(new BasicStroke(5.0f)); // grosor
g2.drawLine (10, 10, 100, 100);
}
}

Responder
avatar

Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.

Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión EmoticonEmoticon