ListSelectionModel interface.
To get a table's list selection model object,
you can use either getSelectionModel method or getColumnModel().getSelectionModel().
To detect list selection events,
you register a listener
on the appropriate list selection model object.
The JList class also gives you the option of
registering a listener 
on the list itself,
rather than directly on the list selection model.
This section looks at two examples that show how to listen to list selection events on a selection model. Examples that Use List Selection Listeners lists examples that listen on the list directly.
In these two examples, you can dynamically change the selection mode to any of the three supported modes:
Here is a picture of ListSelectionDemo example running in a List :

 
 
 
 ListSelectionDemo.javaTableListSelectionDemo.java
Here is the code from ListSelectionDemo that
sets up the selection model and adds a listener to it:
...//where the member variables are defined
JList list;
    ...//in the init method:
    listSelectionModel = list.getSelectionModel();
    listSelectionModel.addListSelectionListener(
                            new SharedListSelectionHandler());
    ...
class SharedListSelectionHandler implements ListSelectionListener {
    public void valueChanged(ListSelectionEvent e) {
        ListSelectionModel lsm = (ListSelectionModel)e.getSource();
        int firstIndex = e.getFirstIndex();
        int lastIndex = e.getLastIndex();
        boolean isAdjusting = e.getValueIsAdjusting();
        output.append("Event for indexes "
                      + firstIndex + " - " + lastIndex
                      + "; isAdjusting is " + isAdjusting
                      + "; selected indexes:");
        if (lsm.isSelectionEmpty()) {
            output.append(" <none>");
        } else {
            // Find out which indexes are selected.
            int minIndex = lsm.getMinSelectionIndex();
            int maxIndex = lsm.getMaxSelectionIndex();
            for (int i = minIndex; i <= maxIndex; i++) {
                if (lsm.isSelectedIndex(i)) {
                    output.append(" " + i);
                }
            }
        }
        output.append(newline);
    }
}
valueChanged method displays the
first and last indices reported by the event,
the value of the event's isAdjusting flag,
and the indices currently selected.
Note that the first and last indices reported by the event 
indicate the inclusive range of items
for which the selection has changed.
If the selection mode is multiple interval selection
some items within the range might not have changed.
The isAdjusting flag is true if
the user is still manipulating the selection,
and false if the user has finished changing the selection.
The ListSelectionEvent object
passed into valueChanged indicates
only that the selection has changed.
The event contains no information about the current selection.
So, this method queries the selection model to
figure out the current selection.
 
The ListSelectionListener Interface
Because ListSelectionListener has only one method,
   it has no corresponding adapter class.
| Method | Purpose | 
|---|---|
| valueChanged(ListSelectionEvent) | Called in response to selection changes. | 
| Method | Purpose | 
|---|---|
| Object getSource() (in java.util.EventObject) | Return the object that fired the event. If you register a list selection listener on a list directly, then the source for each event is the list. Otherwise, the source is the selection model. | 
| int getFirstIndex() | Return the index of the first item whose selection value has changed. Note that for multiple interval selection, the first and last items are guaranteed to have changed but items between them might not have. However, when you press ctrl key and move up or down, the lead selection causes the events being fired even though the actual selection has not changed. | 
| int getLastIndex() | Return the index of the last item whose selection value has changed. Note that for multiple interval selection, the first and last items are guaranteed to have changed but items between them might not have. However, when you press ctrl key and move up and down, the lead selection causes the events being fired even though the actual selection has not changed. | 
| boolean getValueIsAdjusting() | Return trueif the selection is still changing.
     Many list selection listeners are interested only in
     the final state of the selection and can ignore list selection
     events when this method returnstrue. | 
| Example | Where Described | Notes | 
|---|---|---|
| ListSelectionDemo | This section | Reports all list selection events that occur on a list. Lets the user dynamically change the selection mode. | 
| TableListSelectionDemo | This section | Reports all list selection events that occur on a table. Lets the user dynamically change the selection mode. | 
| ListDemo | How to Use Lists | Listens to events on a single-selection list (not on its selection model). Enables and disables a button depending on whether any items are selected in the list. | 
| SplitPaneDemo | How to Use Lists | Listens to events on a single-selection list (not on its selection model). | 
| SimpleTableSelectionDemo | How to Use Tables | Uses two different list selection listeners on one table. One listener listens to list selection events on table columns, the other listens to list selection events on table rows. |