Necesito ayuda con eventos del Mouse (dibujar lineas) URGENTE

Iniciado por DarkSorcerer, 23 Febrero 2013, 04:53 AM

0 Miembros y 1 Visitante están viendo este tema.

DarkSorcerer

Mi programa es sencillo, es aprovechar de usar las librerias Swing y AWT para crear un pizarrón que dibuje solamente lineas, se me ocurrio crear una clase que extienda a JPanel con color blanco, le puse una barra de estado en la parte inferior del panel para que vaya indicando la posición del puntero, ademas, a JPanel le agregue eventos del mouse, de tal manera que se implementara mouseMoved para que indique la coordenada del puntero al moverse, tambien el mouseDragged con la intencion de que la linea se alargara mientras la estiro con el mouse, es ahi el gran problema, yo quiero que mi programa se vea como la linea se estira cuando se este moviendo el Mouse con el boton presionado y al momento de soltar el boton que quede dibujado en la pizarra, pero no me funciona, lo unico que hace es que la linea se muestra una vez que se solto el boton y yo quiero que en todo momento se vea como se alarga, pondre unas capturas y el codigo, ojala me puedan ayudar, he investigado en muchas partes pero no encuentro la solucion.

LA CLASE PRINCIPAL

package ejercicio210;

import javax.swing.JFrame;

public class Ejercicio210 {

    public static void main(String[] args) {
       
        JFrame ventana = new JFrame("Panel de dibujo");
        Panel panel = new Panel();
       
        ventana.add(panel);
        ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ventana.setSize(300,300);
        ventana.setResizable(false);
        ventana.setVisible(true);
       
    }
}



LA CLASE PANEL(LA PIZARRA)

package ejercicio210;

import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.Graphics;

public class Panel extends JPanel {
   
    private JLabel etiquetaInferior;
    private JPanel panelInferior;
    private Linea linea;
    private Linea lineasDibujadas[] = new Linea[100];
    private int contadorLineas = 0;
   
    public Panel(){
       
        setLayout(new BorderLayout());
        setBackground(Color.WHITE);
       
        panelInferior = new JPanel();
        etiquetaInferior = new JLabel("Puntero fuera del panel");
        panelInferior.setLayout(new BorderLayout());
        panelInferior.add(etiquetaInferior,BorderLayout.WEST);
        add(panelInferior,BorderLayout.SOUTH);
        addMouseListener(new EventoMouse());
        addMouseMotionListener(new EventoMouse());
       
    }
   
    private class EventoMouse extends MouseAdapter implements MouseMotionListener {
       
        public void mousePressed(MouseEvent evento){
           
            linea = new Linea(evento.getX(),evento.getY(),evento.getX(),evento.getY());
            repaint();
           
        }
       
        public void mouseDragged(MouseEvent evento){
           
            linea.setFinalX(evento.getX());
            linea.setFinalY(evento.getY());
            etiquetaInferior.setText(String.format("%d,%d",evento.getX(),evento.getY()));
            repaint();
           
        }
       
        public void mouseReleased(MouseEvent evento){
           
            lineasDibujadas[contadorLineas] = linea;
            contadorLineas++;
            repaint();
           
        }
       
        public void mouseMoved(MouseEvent evento){
           
            etiquetaInferior.setText(String.format("%d,%d",evento.getX(),evento.getY()));

        }
       
    }
   
    public void paintComponent(Graphics g){
       
        super.paintComponent(g);
       
        for(int i=0; i<contadorLineas; i++){
           
            lineasDibujadas[i].dibujar(g);
           
        }
       
 

       
    }
   
   
}


LA CLASE LINEA

package ejercicio210;

import java.awt.Graphics;

public class Linea {
   
    private int origenX;
    private int origenY;
    private int finalX;
    private int finalY;
   
    public Linea(int origenX, int origenY, int finalX, int finalY){
       
        this.origenX = origenX;
        this.origenY = origenY;
        this.finalX = finalX;
        this.finalY = finalY;
       
    }
   
    public void setFinalX(int finalX){
       
        this.finalX = finalX;
       
    }
   
    public void setFinalY(int finalY){
       
        this.finalY = finalY;
       
    }
   
    public void dibujar(Graphics g){
       
        g.drawLine(origenX,origenY,finalX,finalY);
       
    }
   
}







Chuidiang

Hola:

En tu método paint, además de dibujar el array de lineas dibujadas, dibuja también la línea suelta que tienes.

Se bueno.