Java - Evitar que se borren dibujos al hacer otros

 
Vista:

Evitar que se borren dibujos al hacer otros

Publicado por Player01 (11 intervenciones) el 20/07/2006 04:15:58
Tengo un programa que dibuja lineas sobre un área de dibujo (un panel separado del panel que contiene los botones) dibuja una linea en dependencia del punto donde se hace presiona el mouse variando en tamaño y dirección mientras se arrastra el mouse hasta que se suelta es por esto que deber redibujar, pero cada vez que hago una linea se borra la linea anterior ¿cómo evito esto? Ayuda URGENTE!

La idea es simular a Paint.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Evitar que se borren dibujos al hacer otros

Publicado por chuidiang (950 intervenciones) el 20/07/2006 05:44:36
Hola:

Tines que guardarte en memoria, de alguna forma, con un array, lista o lo que quieras todas las lineas que quieres dibujar. Luego el panel de dibujo debe ser una clase tuya que herede de algún componente (java.awt.Canvas es el adecuado) y debes redefinir el método paint(Graphics). En ese método dibuja todas las líneas que tienes guardadas.

En http://www.chuidiang.com/java/graficos/simple/grafico_simple.html tienes una pequeña explicación de por qué hay que hacer esto así.

En http://www.chuidiang.com/java/codigo_descargable/appletpaint.php tienes un ejemplo de un pequeño paint en java en el que se hace de esa forma.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Evitar que se borren dibujos al hacer otros

Publicado por Player01 (11 intervenciones) el 22/07/2006 05:11:43
Yo he usado dos paneles, pero no canvas simplemente que en área determinada se aceptan los eventos de mouse, me gustaria saber como guardar la linea. Aquí esta mi codigo del panel para dibujar.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class PanelAutoConten extends JPanel{
public final static int POLIGONO=1,SELECCIONAR=2,RELLENAR=3;

private int x1,y1,x2,y2,operacion;
private int cuentapuntos=0,i=0;


private int puntosx[]=new int[100];
private int puntosy[]=new int[100];


//establecer manejo de eventos de raton para PanelAutoContenido
public PanelAutoConten()
{
//establecer eventos de escucha del raton
addMouseListener(
new MouseAdapter(){ //clase interna anonima

//manejar evento de oprimir boton
public void mousePressed(MouseEvent evento)
{
if (cuentapuntos<puntosx.length){
puntosx[cuentapuntos]=evento.getX();
puntosy[cuentapuntos]=evento.getY();
cuentapuntos=cuentapuntos+1;
x1=evento.getX();
y1=evento.getY();
repaint();
}


}

//manejar evento de soltar boton del raton
public void mouseReleased(MouseEvent evento)
{
if (cuentapuntos<puntosx.length){
puntosx[cuentapuntos]=evento.getX();
puntosy[cuentapuntos]=evento.getY();
cuentapuntos=cuentapuntos+1;

}

}
}//fin de la clase interna anonima
);//Fin de la llamada a addMouseListener


//establecer componentes de escucha de movimientos del raton
addMouseMotionListener(
new MouseMotionAdapter(){//clase interna anónima

//manejar evento de arrastrar el raton
public void mouseDragged(MouseEvent evento)
{
x2=evento.getX();
y2=evento.getY();


}

}//fin de la clase interna anínima


);//fin de la llamada a addMouseMotionListener


}//fin del constructor PanelAutoContenido

//devolver altura y anchura predefinidas de PanelAutoContenido

public Dimension getPreferredSize()
{
return new Dimension(400,300);
}


//dibujar una figuras
public void paintComponent(Graphics g){
super.paintComponent(g);

if(x2!=0 && y2!=0)
g.drawLine(x1,y1,x2,y2);

}

//establecer valor de figura y repintar
public void dibujar(int operacionArealizar){
operacion=operacionArealizar;
repaint();
}


}//Fin de la clase PanelAutoContenido
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Evitar que se borren dibujos al hacer otros

Publicado por chuidiang (950 intervenciones) el 22/07/2006 07:00:15
Hola:

En el mouse pressed guarda los x e y del evento en x1 e y1. Marca en un flag que estás empezando a dibujar linea
En el mouse moved, si el flag indica que estas dibujando linea, guarda x e y del ratón en x2 e y2 y llama a repaint.
En el mouse released, guarda x1,y1 en x[cuentapuntos] e y[cuentapuntos]. guarda x2 y y2 en x[cuentapuntos+1] y y[cuentapuntos+1] y luego incrementa cuentapuntos en 2. Pon a false el flag de que estás dibujando una línea.

Finalmente, en el método paint(), dibuja la linea x1,y1 hacia x2,y2 y dibuja también las que tienes guardadas con algo como esto

for (i=0;i<cuentapuntos;i=i+2)
{
g.drawLine (x[i],y[i],x[i+1],y[i+1]);
}

En http://www.chuidiang.com/java/codigo_descargable/appletpaint.php tienes algo parecido a lo que quieres, pero en vez de líneas rectas, se dibujan líneas a mano alzada.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar