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 :-S
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:
// 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:
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:
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