[Gvsig_desarrolladores] Atrapar cierre de una vista

Francisco José Peñarrubia fpenarru en gmail.com
Mar Mar 25 13:27:26 CET 2008


Hola a todos.

Antes que andar con Timers, setvisible, etc, etc., yo probaría otra cosa.

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.

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.

Bueno, nada más. Espero que te sirva.

Saludos.

Fran.


César Martínez Izquierdo escribió:
> Juan Lucas Dominguez Rubio escribió:
>> Hola
>>  
>> Hace un tiempo también estuve buscando cómo hacer eso y no encontré 
>> la manera.
>>  
>> La única alternativa (un pelín chapucera, lo reconozco) que se me 
>> ocurre es consultar periódicamente (con un Timer) el array de 
>> ventanas presentes y mirar si la que buscas está ahí o no.
>>  
>> Juan Lucas Domínguez Rubio
>> Prodevelop SL, Valencia (España)
>> Tlf.: 96.351.06.12 -- Fax: 96.351.09.68
>> http://www.prodevelop.es <http://www.prodevelop.es/>
>> ________________________________
>>
>> De: gvsig_desarrolladores-bounces en runas.cap.gva.es en nombre de Jose 
>> Luis Celda Ibañez
>> Enviado el: mar 25/03/2008 12:46
>> Para: Lista de Desarrolladores de gvSIG
>> Asunto: Re: [Gvsig_desarrolladores] Atrapar cierre de una vista
>>
>>
>>
>>
>> César Martínez Izquierdo escribió:
>>> Jose Luis Celda Ibañez escribió:
>>>> Hola a todos,
>>>>
>>>> Estamos programando un extensión de callejeros sobre WPS.
>>>>
>>>> Nuestra extensión se vincula a la vista activa, en el momento que se
>>>> "activa/ejecuta".
>>>>
>>>> Necesito saber cuando la vista es cerrada por interacción del usuario.
>>>>
>>>> Existe algun punto donde me pueda engancharme para obtener esta
>>>> informacion?
>>>>
>>>> Gracias a todos.
>>>>
>>>>
>>>> ------------------------------------------------------------------------ 
>>>>
>>>>
>>>> Asunto:
>>>> Atrapar cierre de una vista
>>>> De:
>>>> José Luis Celda Ibáñez <jcelda en logex.es>
>>>> Fecha:
>>>> Sun, 23 Mar 2008 22:14:17 +0100
>>>> Para:
>>>> Lista de Desarrolladores de gvSIG
>>>> <gvsig_desarrolladores en runas.cap.gva.es>
>>>>
>>>> Para:
>>>> Lista de Desarrolladores de gvSIG
>>>> <gvsig_desarrolladores en runas.cap.gva.es>
>>>>
>>>>
>>>> Hola a todos,
>>>>
>>>> Estamos programando un extensión de callejeros sobre WPS.
>>>>
>>>> Nuestra extensión se vincula a la vista activa, en el momento que se
>>>> "activa/ejecuta".
>>>>
>>>> Necesito saber cuando la vista es cerrada por interacción del usuario.
>>>>
>>>> Existe algun punto donde me pueda engancharme para obtener esta
>>>> informacion?
>>>>
>>>> Gracias a todos.
>>>>
>>> Hola, si tu ventana implementa la interfaz IWindowListener, será
>>> avisada del cierre de la ventana con el método windowClosed(). Este
>>> método se llama antes de que la ventana sea efectivamente cerrada.
>>>
>>> Si la ventana es una vista estándar de gvSIG, me temo de que no hay
>>> forma de "subscribirse" para ser avisado de que se ha cerrado.
>>> Deberías crearte una vista personalizada (que extienda de la de gvSIG)
>>> y que implemente IWindowListener.
>>>
>>> Espero que te sea de utilidad.
>>> Saludos,
>>>
>>>
>>
>> Vaya, que pena pues, porque el tema de crear una vista personalizada, no
>> lo tengo nada claro...
>>
>> Las vistas, se crean desde el proyecto, pulsando el boton nuevo, como es
>> normal... y no tengo ni idea si me puedo intercalar en ese mecanismo, ni
>> como, ni donde (ni cuando!) :-)
>>
>> Gracias de todos modos...
>>
>
> Otra forma (también un poco chapucera) sería crearte una extensión, y 
> en sus métodos isVisible() o isEnabled() incluir el método que detecte 
> si la ventana activa sigue siendo la misma.
>
> Estos métodos (isVisible e isEnabled) se llaman básicamente cuando se 
> produce un cambio en las ventanas o bien cuando se llama al método 
> ejecuta algún ACTION_COMMAND de Andami, así que es un buen momento 
> para realizar la comprobación. Eso sí, ojo con incluir comprobaciones 
> muy costosas en esos métodos, ya que se ejecutan para efectuar el 
> repintado de la interfaz.
>
> Saludos,
>



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