The JavaTM Tutorial

| Start of Tutorial > Start of Trail > Start of Lesson | Search Feedback Form

Trail: Creating a GUI with JFC/Swing
Lesson: Writing Event Listeners

## How to Write an Internal Frame Listener

> Internal frame events are to `JInternalFrame` what window events are to `JFrame`. Like window events, internal frame events notify listeners that the "window" has been shown for the first time, disposed of, iconified, deiconified, activated, or deactivated. Before using internal frame events, please familiarize yourself with How to Write a Window Listener.

> The application shown in the following figure demonstrates internal frame events. The application listens for internal frame events from the Event Generator frame, displaying a message that describes each event.

> > Try this:
> > 1. Compile and run `InternalFrameEventDemo`. The source file is `InternalFrameEventDemo.java`.
> >    See Getting Started with Swing if you need help compiling or running this application.
> > 2. Bring up the Event Generator internal frame by clicking the applet's top button.
> >    You should see an "Internal frame opened" message in the display area.
> > 3. Try various operations to see what happens. For example, click the Event Generator so that it gets activated. Click the Event Watcher so that the Event Generator gets deactivated. Click the Event Generator's decorations to iconify, maximize, minimize, and close the window.

> Here is the internal frame event handling code:

> >     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);
> >     	        ...
> >     	    }
> >     	}
> >     	...
> >         }
> >     }

### The Internal Frame Event API

> The `InternalFrameListener` interface and its corresponding adapter class, `InternalFrameAdapter`, contain these methods:

> `void internalFrameOpened(InternalFrameEvent)`
>   Called just after the listened-to internal frame has been shown for the first time.

> `void internalFrameClosing(InternalFrameEvent)`
>   Called in response to a user request that the listened-to internal frame be closed. By default, `JInternalFrame` hides the window when the user closes it. You can use the `JInternalFrame` `setDefaultCloseOperation` method to specify another option, which must be either `DISPOSE_ON_CLOSE` or `DO_NOTHING_ON_CLOSE` (both defined in `WindowConstants`, an interface that `JInternalFrame` implements). Or by implementing an `internalFrameClosing` method in the internal frame's listener, you can add custom behavior (such as bringing up dialogs or saving data) to internal frame closing.

> `void internalFrameClosed(InternalFrameEvent)`
>   Called just after the listened-to internal frame has been disposed of.

> `void internalFrameIconified(InternalFrameEvent)`
> `void internalFrameDeiconified(InternalFrameEvent)`
>   Called just after the listened-to internal frame is iconified or deiconified, respectively.

> `void internalFrameActivated(InternalFrameEvent)`
> `void internalFrameDeactivated(InternalFrameEvent)`
>   Called just after the listened-to internal frame is activated or deactivated, respectively.
> Each internal frame event method has a single parameter: a `InternalFrameEvent` object. The `InternalFrameEvent` class defines no generally useful methods. To get the internal frame that fired the event, use the `getSource` method, which `InternalFrameEvent` inherits from `EventObject`.

### Examples that Use Internal Frame Listeners

> No other source files currently contain internal frame listeners. However, internal frame listeners are very similar to window listeners, and many Swing programs have window listeners:

> Example | Where Described | Notes
> --- | --- | ---
> `InternalFrameEventDemo` | This section | Reports all internal frame events that occur on one internal frame to demonstrate the circumstances under which internal frame events are fired.
> `FrameDemo` | How to Make Frames (Main Windows) | One of many examples that listens for window closing events, so that the application can exit when its only window is closed.
> `SliderDemo` | How to Use Sliders | Listens for window iconify and deiconify events, so that it can stop the animation when the window isn't visible.

| Start of Tutorial > Start of Trail > Start of Lesson | Search Feedback Form