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 a List Data Listener

> List data events occur when the contents of a mutable list change. Since the model — not the component — fires these events, you have to register a list data listener with the list model. If you haven't explicitly created a list with a mutable list model, then your list is immutable, and its model will not fire these events.

> > Note: Combo box models also fire list data events. However, you normally don't need to know about them unless you're creating a custom combo box model.

> The following example demonstrates list data events on a mutable list:

> #### [PENDING: Updated screenshot with sample output forthcoming.]

> > Try this:
> > 1. Run ListDataEventDemo using JavaTM Web Start. Or, to compile and run the example yourself, consult the example index.
> > 2. Type in the name of your favorite ski resort and click the Add button. An `intervalAdded` event was fired.
> > 3. Select a few continguous items in the list and click the Delete button. An `intervalRemoved` event was fired.
> > 4. Select one item and move it up or down in the list with the arrow buttons. Two `contentsChanged` events are fired — one for the item that moved and one for the item that was displaced.

> You can find the demo's code in `ListDataEventDemo.java`. Here's the code that registers a list data listener on the list model and implements the listener:

> >     //...where member variables are declared...
> >     private DefaultListModel listModel;
> >     ...
> >     //Create and populate the list model
> >     listModel = new DefaultListModel();
> >     ...
> >     listModel.addListDataListener(new MyListDataListener());

> >     class MyListDataListener implements ListDataListener {
> >         public void contentsChanged(ListDataEvent e) {
> >             log.append("contentsChanged: " + e.getIndex0() +
> >     	           ", " + e.getIndex1() + newline);
> >         }
> >         public void intervalAdded(ListDataEvent e) {
> >             log.append("intervalAdded: " + e.getIndex0() +
> >     	           ", " + e.getIndex1() + newline);
> >         }
> >         public void intervalRemoved(ListDataEvent e) {
> >             log.append("intervalRemoved: " + e.getIndex0() +
> >     	           ", " + e.getIndex1() + newline);
> >         }
> >     }

### The List Data Listener API

> The ListDataListener Interface

> `ListDataListener` has no corresponding adapter class.

> Method | Purpose
> --- | ---
> `intervalAdded(ListDataEvent)` | Called when one or more items have been added to the list.
> `intervalRemoved(ListDataEvent)` | Called when one or more items have been removed from the list.
> `contentsChanged(ListDataEvent)` | Called when the contents of one or more items in the list have changed.

> The ListDataEvent API

> Method | Purpose
> --- | ---
> `Object getSource()` (in `java.util.EventObject`) | Return the object that fired the event.
> `int getIndex0()` | Return the index of the first item whose value has changed.
> `int getIndex1()` | Return the index of the last item whose value has changed.
> `int getType()` | Return the event type. The possible values are: `CONTENTS_CHANGED`, `INTERVAL_ADDED`, or `INTERVAL_REMOVED`.

### Examples that Use List Data Listeners

> The following table lists the examples that use list data listeners.

> Example | Where Described | Notes
> --- | --- | ---
> `ListDataEventDemo` | This section | Reports all list data events that occur on a list.

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

Copyright 1995-2004 Sun Microsystems, Inc. All rights reserved.