Pregunta

Estoy tratando de hacer un Applet Java que me permita dibujar una estructura de datos gráficos en un lienzo. Haré esto haciendo clic donde quiero crear nodos y haciendo clic en los nodos para conectarlos. El problema es que no puedo lograr que el método paint () se comporte correctamente. Agrego nuevos nodos al gráfico (y cuadrados en el lienzo) dentro del método mousePressed (MouseEvent e) usando,

Graphics g = this.getGraphics();
g.setColor(Color.blue);
g.fillRect(e.getX(), e.gety(), 40, 40);

Todo funciona bien, hasta que cambie el tamaño de la ventana y luego desaparezcan todos los rectángulos rellenos. Anulé el método de pintura a un método vacío, pero lo mismo sigue sucediendo. No puedo agregar los comandos fillRect dentro de paint () porque no sé qué rectángulos existen hasta que el usuario interactúa con él usando el mouse.

¿Cómo puedo usar g.fillRect () dentro de los métodos de escucha del mouse y hacer que se peguen?

¿Fue útil?

Solución

El problema es que el lugar al que estás dibujando no es persistente. En cualquier momento, puede perder todo lo que ha atraído. Se llama al método paint (Graphics) cuando esto sucede. Deberá volver a pintar la imagen completa cada vez que esto suceda, o deberá dejar a un lado un lienzo para dibujar y copiar el contenido en los gráficos de su applet según sea necesario.

Aquí se explica cómo crear y dibujar una imagen:
http://java.sun.com/docs/books/tutorial/2d/images/drawonimage.html

Luego, en su método de pintura, use el método drawImage (...) de su Graphics para mostrar la imagen que ha creado.

Otros consejos

No sé si estoy leyendo esto correctamente, pero ¿por qué no almacenar la ubicación del último clic en una variable para pintar más tarde, cuando se llama al método paint ()?

Tienes que anular el escucha de acción de cambio de tamaño de la ventana y llamar a repintar dentro de ella.

Los gráficos son temporales. Cuando una región se ensucia, se volverá a pintar.

La mejor manera es crear una imagen almacenada, pintarla en mousePressed y llamar a repintar.
Cuando se llama a paint, dibuje la imagen en el objeto gráfico pasado. De esta manera, no necesita almacenar los Rectángulos y tiene un búfer que mejorará el rendimiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top