[Gvsig_desarrolladores] Atrapar cierre de una vista

César Martínez Izquierdo cesar.martinez en iver.es
Mar Mar 25 13:45:03 CET 2008


Francisco José Peñarrubia escribió:

> Vereis, oficialmente, una ventana en gvSIG es un IWindow, un interfaz de 
> Andami. Pero el corePlugin lo que hace es asociar ese objeto (un JPanel 
> es lo que suele ser) a una ventana real, de las de Swing "de toda la 
> vida". La ventana que se crea y se rellena con el JPanel es un 
> JInternalFrame. No creo que eso cambie en un futuro cercano, así que 
> podemos suponer que la ventana es un JInternalFrame y usar sus métodos.

Ojo, esta asunción es un poco arriesgada. En el piloto 3D, por ejemplo, 
las vistas se muestran usando ventanas que no son JInternalFrames (son 
JDialogs).

> Traducido (aunque no lo he probado):
> - Recupera la ventana con 
> PluginServices.getMdiManager().getActiveWindow() o algún otro método.
> - Haz un cast a un JInternalFrame.
> - Crea un javax.swing.event.InternalFrameListener y añadelo al 
> JInternalFrame (addInternalFrameListener).
> 
> Ya que la vista es una SingletonWindow, creo que solo existe una, y se 
> conservarán sus listeners entre apertura y apertura.

Unos apuntes respecto a esto:
El método getActiveWindow() te dará el JPanel (es decir, el IWindow) que 
está contenido en la ventana activa, no la ventana en sí. (Dicho de una 
forma, devuelve el contenido de la ventana, no la ventana en sí).

Para llegar a la ventana, deberías hacerle un "cast" del IWindow a 
JPanel, y usar el método getParent repetidamente hasta llegar al 
JInternalFrame o al JDialog. En ese momento sí podríamos hacer un cast y 
añadir el listener.

Pero reitero que esto es un método "poco seguro", porque de esta forma 
te estás saltando las interfaces y asumes una implementación concreta 
(que ya ha cambiado y puede volver a cambiar).
Si optas por esta técnica, te recomiendo que al menos pruebes con varios 
tipos de ventana (JDialog, JInternalFrame, JFrame, JWindow...) para ver 
qué cast se puede realizar. Si te basta con que funcione en versiones 
actuales de gvSIG, puedes simplemente probar con JInternalFrame y JDialog.

Saludos,


> Bueno, nada más. Espero que te sirva.
> 
> Saludos.
> 
> Fran.



-- 
César Martínez Izquierdo
Equipo de desarrollo gvSIG
http://www.gvsig.gva.es

IVER T.I.
C/ Lérida 20
46009 Valencia - Spain
http://www.iver.es


Este mensaje y sus archivos son confidenciales. No está permitida su reproducción o distribución sin la autorización expresa de "IVER Tecnologías de la Información". Si usted no es el destinatario previsto, queda desautorizado cualquier uso, acceso o copia de este mensaje. Si ha recibido este mensaje por error, por favor bórrelo e infórmenos por esta misma vía.




Más información sobre la lista de distribución gvSIG_desarrolladores