Foros del Web » Programación para mayores de 30 ;) » Java »

Pintar en java. No se me guarda lo que pinto.

Estas en el tema de Pintar en java. No se me guarda lo que pinto. en el foro de Java en Foros del Web. Hola gente: Os cuento, lo mas resumidamente que pueda. Estoy haciendo un programa "paint windows". El caso es que lo llevo avanzadillo, pero aun no ...
  #1 (permalink)  
Antiguo 15/01/2012, 08:45
 
Fecha de Ingreso: julio-2010
Mensajes: 134
Antigüedad: 13 años, 9 meses
Puntos: 0
Pintar en java. No se me guarda lo que pinto.

Hola gente:

Os cuento, lo mas resumidamente que pueda.
Estoy haciendo un programa "paint windows".
El caso es que lo llevo avanzadillo, pero aun no consigo hacer que las figuras que dibujo se me queden en el lienzo, es decir, cada vez que pinto una...cuando voy a pintar la otra se me borra la anterior..... y asi sucesivamente. Asi que nunca pinto nada

He estado leyendo sobre tecnicas de doble buffering, e intentado adaptarlo a mi codigo....pero NADA.... No se si es que no se hace con esto....o no se adaptarlo bien.

Os voy a poner trozos de mi codigo aver si me podeis exar una mano:

Código:
// ESTAS DOS FUNCIONES CARGAN UNA IMAGEN QUE SE LE PASA EN EL LIENZO, O AL MENOS ESO ENTENDI CUANDO ME LO EXPLICARON, SE SUPONE QUE TMB SE UTILIZAN PARA CONSEGUIR LO QUE QUIERO, PERO NO CONSIGO NADA.

    public void setImageView (BufferedImage img){
        this.imgView = img;
        this.setPreferredSize(new Dimension(img.getWidth(), img.getHeight()));
    }

    public void setImageSource (BufferedImage img){
        this.imgSource = img;
        this.setImageView(img);
        g2daux = img.createGraphics(); 
        
    }
Aqui mi metodo paint:

Código:
     public void paint (Graphics g){
        super.paint(g);
        Graphics2D g2d = (Graphics2D) g;
        
        
        if(imgView != null){  //SIRVE PARA CARGAR UNA IMAGEN DEL ORDENADOR AL LIENZO. EN CASO DE SELECCIONALO EN EL MENU.
            g2d.drawImage(imgView, 0, 0, this);
        }

        // APARTIR DE AQUI LO UNICO QUE HAGO ES DARLE A GRAPHICS ATRIBUTOS PARA DIBUJAR, COLOR, TRAZO...ETC ETC...

        if(aux_boton==1){
            g2d.setColor(co); 
        }
        else{
            g2d.setColor(coDere);
        }
        g2d.setComposite(ac);
        
        if(forma==0){ // El punto
            if(rell==1){
                g2d.fillOval(p.x, p.y, (int)gr, (int)gr);
                
             }
             else{
                g2d.drawOval(p.x, p.y, (int)gr, (int)gr);
             }
        }
        else{ // Elipse, Linea y Rectangulo

            g2d.setStroke(sk);
            //g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

            if(rell==0){
                g2d.draw(l);
            }
            else{
                if(this.getrell()==1){
                    g2d.setColor(coDere);
                    g2d.fill(l);
                    g2d.setColor(co);
                    g2d.draw(l);
                }
                else{
                    g2d.setPaint(degradar);  
                    g2d.fill(l);
                }
            }
         }

    }
Y aqui los metodos que uso para manejar el raton:

Código:
private void formMouseDragged(java.awt.event.MouseEvent evt) {                                  
    if (SwingUtilities.isLeftMouseButton(evt)){
         this.aux_boton=1;
     }else if (SwingUtilities.isRightMouseButton(evt)){
         this.aux_boton=0;
     }  

    this.p2 = evt.getPoint();
    if(this.forma!=0){
         this.p2 = evt.getPoint();
         pintar(p2); //PINTAR EN UNA FUNCION QUE SE LE PASA UN PUNTO, EL CUAL HACE REFERENCIA AL MOMENTO DONDE SE SUELTA EL RATON. LA FUNCION PINTAR, SE ENCARGA DE GUARDAR EN UN OBJETO TIPO SHAPE QUE FORMA QUEREMOS DIBUJAR, TMB EN ESTA FUNCION GUARDO ALGUNOS ATRIBUTOS PARA DIBUJAR ESA FORMAS...
         
    }
    else{
        this.p = evt.getPoint();
    }
    this.repaint();
   
}   

private void formMouseReleased(java.awt.event.MouseEvent evt) {                                   
    
     if (SwingUtilities.isLeftMouseButton(evt)){
         this.aux_boton=1;
     }else if (SwingUtilities.isRightMouseButton(evt)){
         this.aux_boton=0;
     }
     
    this.p2 = evt.getPoint();
    if(this.forma!=0){
         pintar(p2);
         if(forma==5){
            if(this.aux_curva==1){
                this.aux_curva=0;
            }else{ 
                this.aux_curva=1;
            }
         }
    }
    else{
        this.p = evt.getPoint();
    }
    //g2daux.draw(l);//---> ¿Para que era esto? // CON ESTO ME DIJERON QUE CONSEGUIRIA LO QUE QUIERO....PERO NADA, NO CONSIGO HACER NADA...
    this.repaint();
}
bueno gente. Espero no sea demasiado coñazo. Muchas gracias de antemano, de verdad. Aver si me podeis exar una mano.

Un saludo
  #2 (permalink)  
Antiguo 15/01/2012, 13:53
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Pintar en java. No se me guarda lo que pinto.

Hola:

en el método paint() tú tienes que pitar todo lo que quieras que se pinte, es decir, las figuras anteriores y la nueva. Si no pintas las anteriores, desaparecen... puesto que nadie las pinta.

Tienes que guardarte en algún sitio un array o lista de figuras a pintar y pintarlas todas.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 15/01/2012, 14:35
 
Fecha de Ingreso: julio-2010
Mensajes: 134
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Pintar en java. No se me guarda lo que pinto.

mmmmmm
Pero segun me han expliicado... No hace falta de momento hacer eso para lo que quiero.

Segun me dijeron, se trataba de pintar en una bufferedimage lo que estas dibujando en ese momento... y cuando sueltas el boton del raton, hacias que se copiara eso que estabas pintando en la imagen de "fondo" por asi llamarlo....

No se si me explico...
  #4 (permalink)  
Antiguo 15/01/2012, 16:28
 
Fecha de Ingreso: noviembre-2010
Ubicación: chile
Mensajes: 24
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Pintar en java. No se me guarda lo que pinto.

no es necesario el buffer, solo puedes utilizar el metodo paint.
El metodo paint pinta lo que hace dicho metodo en ese instante, por ende no
va a pintar lo que hayas pintado antes.Vi que tienes un metodo que cuando suelta el raton pinta usndo las coordenadas x e y, lo que puedes hacer es guardar en un arraylist las coordenadas x e y al instante de soltar el raton, y luego en el metodo paint recorres el arraylist y pintas todas las figuras con tus coordenadas que guardaste en el arraylist.

puedes hacer arraylist para cada tipo de figura

Arraylist<Point>,Arraylist<Elipse> , etc para que se mas facil pintarlos en el paint..
  #5 (permalink)  
Antiguo 16/01/2012, 04:21
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Pintar en java. No se me guarda lo que pinto.

Hola:

Sí puedes usar el buffer, pero entonces tus métodos de movimiento del mouse deben pintar sobre el buffer, siempre sobre el mismo buffer y sin borrarlo. El método paint() unicamente debe mostrar ese buffer en el componente. Es decir

Código java:
Ver original
  1. private void formMouseDragged(java.awt.event.MouseEvent evt) {
  2.     // Pintar sobre el graphics del buffer el "arrastrado" que estes haciendo.
  3.     this.repaint();                            
  4. }  
  5.  
  6. private void formMouseReleased(java.awt.event.MouseEvent evt) {                                  
  7.     // terminadr sobre el graphics del buffer lo que estés arrastrando.
  8.     this.repaint();
  9. }
  10.  
  11. .....
  12.  
  13. public void paint(Graphics g) {
  14.     g.drawImage(el buffer );
  15. }

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: jar, pintar, guardar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:56.