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
Recibe notificaciones por correo
15 Comentarios
Escribir Comentariola cagaste con el
Responder//JFrame.setDefaultLookAndFeelDecorated(true);
xD!!
Mmmmm.... No entiendo ese comentario puesto que solo es el look and feel....
ResponderMerci d'avoir un blog interessant
Respondermuy buen ejemplo, gracias!
Respondergracias me sirvio mucho tu codigo.
Respondersaludos
exelnte aporte de gran ayuda
ResponderMe 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
Responderimport 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
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:
Respondervoid 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!!
¡Hola!
ResponderEstoy 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?
¡¡Muchas gracias de antemano!!
ResponderBuena pregunta, ya está publicado en la nueva entrada, cualquier duda comenta.
ResponderEnlace: http://carlitoxenlaweb.blogspot.com/2012/07/dibujar-lineas-con-jcheckbox.html
ola me podrias ayudar xf como de hacen mas gruesas las lineas???
Responderhola, como se hacen mas gruesas laas lineas (codigo) xf
ResponderEsto 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!!!
Responderhttp://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html
Ya respondí esta pregunta, pero aquí va de nuevo, debes re-dibujar el método paint (enlace que comente anteriormente):
Responderpublic 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);
}
}
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