## Cómo escribir un Oyente de Internal Frame

Los eventos Internal frame son a los JInternalFrame lo que los eventos window son a los JFrame. Al igual que los eventos window, los eventos internal frame notifican a sus oyentes que la "window" ha sido mostrada por primera vez, ha sido eliminada, iconificada, maximizada, activada o desactivada. Antes de usar este tipo de eventos debemos familiarizarnos con los Oyentes de Window.

#### Métodos de Evento Internal Frame

> El interface InternalFrameListener y su correspondiente clase adaptador, InternalFrameAdapter, contienen estos métodos:

> void internalFrameOpened(InternalFrameEvent)
>   Se le llama después de el internal frame escuchado se muestre por primera vez.

> void internalFrameClosing(InternalFrameEvent)
>   Se le llama en respuesta a una petición del usuario de que el internal frame esuchado sea cerrado. Por defecto , JInternalFrame oculta la ventana cuando el usuario lo cierra. Podemos usar el método setDefaultCloseOperation de JInternalFrame para especificar otra opción, que puede ser DISPOSE_ON_CLOSE o DO_NOTHING_ON_CLOSE (ambas definidas en WindowConstants, un interface que implementa JInternalFrame). O implementando un método internalFrameClosing el oyente del internal frame, podemos añadir un comportamiento personalizado (como mostrar un díalogo o salvar datos) para cerrar un internal frame.

> void internalFrameClosed(InternalFrameEvent)
>   Se le llama después de que haya desaparecido el internal frame escuchado.

> void internalFrameIconified(InternalFrameEvent)
> void internalFrameDeiconified(InternalFrameEvent)
>   Se les llama después de que el internal frame escuchado sea iconificado o maximizado, respectivamente.

> void internalFrameActivated(InternalFrameEvent)
> void internalFrameDeactivated(InternalFrameEvent)
>   Se les llama después de que el internal frame escuchado sea activado o desactivado, respectivamente.

#### Ejemplos de Manejo de Eventos InternalFrame

> La aplicación mostada en la siguiente figura demuestra el uso de eventos internal frame. La aplicación escucha eventos internal frame desde el frame Event Generator, mostrando un mensaje que describe cada evento.

> > Prueba esto:
> > 1. Compila y ejecuta InternalFrameEventDemo. El fichero fuente es InternalFrameEventDemo.java.
> > 2. Despliega la ventana Evento Generator pulsando el botón de la parte superior del applet.
> >    Deberías ver un mensaje "Internal frame opened" en el área de display.
> > 3. Prueba varias cosas para ver que sucede. Por ejemplo, pulsa el Event Generator para activarlo. Pulsa el Event Watcher para desactivar el Event Generator. Pulsa la decoración de la ventana Event Generator para iconificara, maximizarla y cerrarla.
> >    Puedes ver la página Cómo escribir un Oyente de Window para más información sobre los tipos de eventos que verás.

> Aquí está el código que maneja los eventos de internal frame:

>     public class InternalFrameEventDemo ...
>     		     implements InternalFrameListener ... {
>         ...
>         protected void createListenedToWindow() {
>     	listenedToWindow = new JInternalFrame("Event Generator",
>     					      true,  //resizable
>     					      true,  //closable
>     					      true,  //maximizable
>     					      true); //iconifiable
>     	listenedToWindow.setDefaultCloseOperation(
>     				WindowConstants.DISPOSE_ON_CLOSE);
>     	...
>         }

>         public void internalFrameClosing(InternalFrameEvent e) {
>     	displayMessage("Internal frame closing", e);
>         }

>         public void internalFrameClosed(InternalFrameEvent e) {
>     	displayMessage("Internal frame closed", e);
>     	listenedToWindow = null;
>         }

>         public void internalFrameOpened(InternalFrameEvent e) {
>     	displayMessage("Internal frame opened", e);
>         }

>         public void internalFrameIconified(InternalFrameEvent e) {
>     	displayMessage("Internal frame iconified", e);
>         }

>         public void internalFrameDeiconified(InternalFrameEvent e) {
>     	displayMessage("Internal frame deiconified", e);
>         }

>         public void internalFrameActivated(InternalFrameEvent e) {
>     	displayMessage("Internal frame activated", e);
>         }

>         public void internalFrameDeactivated(InternalFrameEvent e) {
>     	displayMessage("Internal frame deactivated", e);
>         }

>         void displayMessage(String prefix, InternalFrameEvent e) {
>     	String s = prefix + ": " + e.getSource();
>     	display.append(s + newline);
>         }

>         public void actionPerformed(ActionEvent e) {
>     	if (e.getActionCommand().equals(SHOW)) {
>     	    ...
>     	    if (listenedToWindow == null) {
>     	        createListenedToWindow();
>     	        listenedToWindow.addInternalFrameListener(this);
>     	        ...
>     	    }
>     	}
>     	...
>         }
>     }

#### La clase InternalFrameEvent

> Cada método de evento internal frame tiene un sólo parámetro: un objeto InternalFrameEvent. La clase InternalFrameEvent generalmente no define métodos útiles. Para obtener el internal frame que generó el evento, se usa el método getSource, que InternalFrameEvent hereda de EventObject.

Ozito