Java - pintar en AWT

 
Vista:

pintar en AWT

Publicado por myd (5 intervenciones) el 17/05/2003 21:13:22
Hola a todos,

Estoy desarrollando una aplicación (muy básica) para pintar en una ventana (tipo microsoft paint). No quiero pintar figuras, sino dejar apretado el boton del ratón y arrastrarlo y de esa forma pintar sobre la vantana.Lo he hecho mediante un vector de puntos, lo que ocurre es que al minimizar la ventana o redimensionarla, el dibujo no permanece, por lo que queria hacer otro vector que contenga los vectores anteriores, es decir, un vector de vectores.
¿Alguien sabe como podría hacerlo? estoy un poco perdido...
quizás algo de este tipo en el metodo paint:

for (i=1;1<vectorGarabato.size(); i++){
vectorTrazo = (Vector) vectorGarabato.get(i);
for (i=1 ; i< vectorTrazo.size(); i++){
int x=0, y=0;
punto = (Point)vectorTrazo.get(i);
x=(int)punto.getX();
y=(int)punto.getY();
g.drawLine(xAnt, yAnt, x,y);
xAnt = x;
yAnt =y;

¿Alguien me podria ayudar? gracias
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

RE:pintar en AWT

Publicado por chuidiang (532 intervenciones) el 17/05/2003 22:46:27
Eso más o menos debería funcionar. Ten en cuenta que además de la función paint() también están las funciones update(), repaint(), etc, Haz primero una prueba sencilla. Pinta una linea simple en un componente y asegurate que se repinta al redimensionar el componente, es decir, que además de paint() has redefinido el método adecuado. Luego ya puedes pelearte con el vector garabato y traza.
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:pintar en AWT

Publicado por myd (5 intervenciones) el 17/05/2003 23:22:59
Muchas gracias por tu respuesta, pero te cuento...
utilizando solo el vector de puntos (vectorTrazo) no tengo problemas, al redimensionar, el dibujo permanece( imaginate que pinto dos lineas separadas). lo que pasa es que cuando vuelves a maximizar se unen el primer punto de la primera linea con el ultimo punto de la segunda linea(mi profesor se ha empeñado en hacerlo asi). dice que para arreglar eso lo que hay que hacer es otro vector que contenga al vector de puntos en cuestion, y eso es lo que me trae de cabeza. Dentro de mousepressed he puesto algo asi:
m_vectorGarabato.addElement(m_vectorTrazo);
en mousegragged algo asi:
m_vectorTrazo.addelement(punto)
y en paint() algo asi:
public void paint(Graphics g) {
/**@todo: Override this java.awt.Component method*/
//super.paint( g);
int i=0;
int xAnt=0, yAnt=0;
Point punto= (Point)vectorTrazo.get(i);
xAnt=(int)punto.getX();
yAnt=(int)punto.getY();
for ( i=1;i<vectorGarabato.size();i++){
vectorTrazo = (Vector)vectorGarabato.get(i);
for (i=1 ; i< vectorTrazo.size(); i++){
int x=0, y=0;
punto = (Point)vectorTrazo.get(i);
x=(int)punto.getX();
y=(int)punto.getY();
g.drawLine(xAnt, yAnt, x,y);
xAnt = x;
yAnt =y;
}
}

}

llevo casi 8 horas y no lo consigo :(
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:pintar en AWT

Publicado por chuidiang (532 intervenciones) el 18/05/2003 07:29:55
Cada vez que empieces a pintar un trazo, debes inicializar las variables xAnt e yAnt con el primer punto del trazo. En vez de poner xAnt = getX e yAnt = getY antes de los bucles, mételo entre el primer for y el segundo for, haciendo que cojan el primer punto del trazo actual.
Es decir

for ( ... Garabato.size() ...)
{
trazo = Garabato.getTrazo()
xAnt = trazo.getx()
yAnt = trazo.gety()
for ( ... trazo.size() ....)
{
....
}
}
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:pintar en AWT

Publicado por myd (5 intervenciones) el 18/05/2003 20:28:25
el problema es que trazo es un vector y no dispone del metodo trazo.getx().
podria poner xANT = trazo.get(i)? lo qe ocurres es que xAnt almacena un int y no me deja hacer el casting...
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:pintar en AWT

Publicado por myd (5 intervenciones) el 18/05/2003 20:45:25
en cualquier caso al minimizar consigo que se vuelva a pintar, lo que me ocurre ahora es que cuando maximizas, se une el ultimo punto del primer trazo con el primer punto del segundo trazo
nuevo metodo paint:
public void paint(Graphics g) {
/**@todo: Override this java.awt.Component method*/
//super.paint( g);
int i=0;
int xAnt=0, yAnt=0;
Point punto= (Point)vectorTrazo.get(i);
vectorTrazo= (Vector)vectorGarabato.get(i);
xAnt=(int)punto.getX();
yAnt=(int)punto.getY();
for (i=1; i< vectorGarabato.size(); i++){
vectorTrazo = (Vector)vectorGarabato.get(i);

//xAnt = (int)vectorTrazo.get(i);
//yAnt = (int)vectorTrazo.get(i);

for (i=1 ; i< vectorTrazo.size(); i++){
int x=0, y=0;
punto = (Point)vectorTrazo.get(i);

x=(int)punto.getX();
y=(int)punto.getY();
g.drawLine(xAnt, yAnt, x,y);
xAnt = x;
yAnt =y;
}
}
}
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:pintar en AWT

Publicado por chuidiang (532 intervenciones) el 18/05/2003 21:37:04
Perdona, en mi respuesta anterior no me preocupé excesivamente de los tipos, me preocupé más del concepto que del detalle.

Más o menos lo tienes, lo que veo raro es el orden de algunas instrucciones.

1. Obtienes el punto a partir de vectorTrazo antes de obtener vectorTrazo a partir de vectorGarabato. Debería ser al reves.

2. Los xAnt e yAnt que tienes comentados entre los dos bucles deben estar ahi (sin comentar), pero como bien dices tu, vectorTrazo te devuelve un Point. Pidele a ese Point la x y la y para guardarlos en tus variables.

Resumiendo (y sin fijarme en tipos)

bucle para cada trazo en garabato (desde 0 hasta size())
obtener trazo i-esimo.
recoger como xAnt e yAnt los x,y del punto 0 de trazo
bucle para cada punto de trazo, (desde 1 hasta size(), saltándose el 0)
recoger en x,y el punto de trazo
pintar linea
actualizar xAnt e yAnt con x e y
fin de bucle de puntos de trazo
fin de bucle de trazos en garabato


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:pintar en AWT

Publicado por myd (5 intervenciones) el 18/05/2003 23:01:42
Aun no consigo que funcione, pero no tardare mucho.

Muchas gracias por la orientacion, ya se por donde seguir
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