Repintar componente

Zia
12 de Marzo del 2006
Hola, estoy realizando unas prácticas con las Swing de java y tengo un problemilla.
Resulta que mi aplicación quiero que continuamente esté dibujando lineas, pero que no sobreescriba lo que ya ha dibujado. Es decir, si le digo que dibuje una linea, y ya hay otra dibujada en el panel, que no borre la anterior.
Actualmente, desde un JPanel llamo a repaint(), y dibujo las lineas dentro de paintComponent(Graphics g).
He probado utilizando update(), pero sigue sin funcionar.

Gracias y un saludo.

enaj
12 de Marzo del 2006
Hola!! No se como lo habrás programado pero yo lo que haría es ir guardando los parámetros necesarios en una clase llamada Linea e ir almacenandolas en un ArrayList( ó LinkedList, ...).
Dentro del método paintComponent(Graphics g) recorrería el ArrayList obteniendo los parámetros de cada línea y repintandola.

Espero que te haya ayudado.

Zia
12 de Marzo del 2006
En primer lugar gracias por contestar.

Esa solución fue la primera que pensé, pero creo que puede ser una carga importante. Me gustaría saber si existe una manera de superponer la imagen, sin borrar lo que ya he dibujado.

Gracias.

enaj
12 de Marzo del 2006
Después de pensarlo, creo que otra solución es utilizar una ÚNICA clase llamada Lineas que hereda de JLabel e implemente Icon. En esta clase se guardarían los parámetros de todas las líneas (Icon->paintIcon(){ for(){ g.drawLine() }}).
En el método paintComponent de JPanel podrías utilizarlo para añadir nuevas líneas y a continuación almacenarla en la clase Lineas.

enaj
12 de Marzo del 2006
Hola!!

Creo que si estás utilizando g.drawLine(); en cuanto se produzca un repintado si no refrescas las líneas van a desaparecer por lo que las soluciones que yo conozco se basan en la solución del anterior post. Yo no conozco una forma de dibujar (con g.drawLine()) sin sobreescribir lo que ya se ha dibujado (con g.drawLine()).

La solución más típica es la de utilizar un Canvas(AWT):
http://www.dcc.uchile.cl/~lmateu/Java/Apuntes/awt.htm
http://www.sc.ehu.es/sbweb/fisica/cursoJava/applets/events/canvas1.htm

Otra solución pero que no es recomendable para lo que quieres hacer es utilizar una clase llamada Linea que herede de JLabel y que implemente la interfaz Icon.

Espero que te haya servido de ayuda.