lunes, 2 de diciembre de 2013

Dibujar lineas en Java


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.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// 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

11 comentarios :

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

    xD!!
    Responder
  2. Mmmmm.... No entiendo ese comentario puesto que solo es el look and feel....
    Responder
  3. Merci d'avoir un blog interessant
    Responder
  4. muy buen ejemplo, gracias!
    Responder
  5. gracias me sirvio mucho tu codigo.

    saludos
    Responder
  6. exelnte aporte de gran ayuda
    Responder
  7. 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
  8. 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
  9. ¡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
    Respuestas
    1. Buena pregunta, ya está publicado en la nueva entrada, cualquier duda comenta.

      Enlace: http://carlitoxenlaweb.blogspot.com/2012/07/dibujar-lineas-con-jcheckbox.html
  10. ¡¡Muchas gracias de antemano!!
    Responder
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....
Con la tecnología de Blogger.
Readers

¿Cuál es la diferencia fundamental entre extends y implements en java? 

¿Cuál es la diferencia fundamental entre extends y implements en java?  

extends se usa para heredar de otra clase, e implements es para implementar clases abstractas, las clases abstractas tienen declaracion de funciones sin ser implementades por esa razon cuando usas implements tienes que sobrescribir todas las funciones de la clase abstracta.

Source:

/*salvadorG*/
  • Rate
  • Comment

Other Answers (2)

Oldest
  • Conde de la Fere answered 6 years ago
    El extends es para declarar una relación de herencia. Esto puede ser entre dos clases (public class ClassA extends ClassB) o entre interfaces (public interface InterfaceA extends InterfaceB).
    De esta manera, la clase (o interfaz) B tendrá una relación "es un" con la clase A. Ejemplo:

    public class Perro extends Animal

    En este caso podemos decir que un Perro es un Animal y podremos usar un Perro en cualquier lugar donde se espere un animal.

    El implements por otro lado se usa cuando una clase debe tener los métodos declarados en una interfaz.
    Por ejemplo
    public interface Parlante {
    public void decirAlgo();
    }

    Luego

    public class Persona implements Parlante{
    public void decirAlgo(){
    System.out.println("Hola");
    }
    }

    public class Perro implements Parlante {
    public void decirAlgo(){
    System.out.println("Guau");
    }
    }

    El implements obliga a la clase a (justamente) implementar los métodos que estaban definidos en la interfaz. Como se puede ver cada clase implementa la interfaz a su manera.
    Además se pueden hacer cosas como
    Parlante p = new Perro();
    Parlante p1 = new Persona();
    y hacer
    p.decirAlgo();
    p1.decirAlgo();
    y cada uno se comportará de manera distinta aunque hayas declarado ambos como parlantes. De la misma manera que antes en cada lugar donde se espere un Parlante se podrá pasar un objeto de cualquier clase que implemente dicha interfaz.
    Las interfaces se utilizan para definir comportamiento.
    Para no marearte más acá, cuando entiendas esto fijate lo que es una clase abstracta, qeu es algo a mitad de camino entre ambas cosas.
    Espero haberte ayudado.
    Saludos
    • 5
    • Comment

  • reos answered 6 years ago
    Un problema que aparece con la herencia multiple es que si dos o más objetos padres implementan un método cuando tu llamas a ese método en el hijo el compilador no sabe a cual implementación llamar. si a la del padre 1 o la del padre 2. Es por esto que java no permite la herencia múltiple. Entonces lo que dice básicamente es que si quieres heredar usas extends pero si además quisieras utilizar herencia multiple la puedes simular implementando una interfaz. Así si el onjeto padre tiene el método correr() y la interfaz también la tiene, cuando llames a ese metodo desde el hijo sabe que sólo puede ejecutar el del padre y no el de la interfaz.