package edu.princeton.swing; import java.beans.*; import java.util.Vector; import javax.swing.*; /** * PDefaultListSelectionModel extends to add DefaultListSelectionModel support. */ public class PDefaultListSelectionModel extends DefaultListSelectionModel implements PListSelectionModel { private Vector propertyChangeListeners; /** * Creates a new PDefaultListSelectionModel. */ public PDefaultListSelectionModel() { super(); propertyChangeListeners = new Vector(); } /** * Adds a PropertyChangeListener to the model to listen for changes in "selectionMode". * * @param listener The new PropertyChangeListener to add. */ public void addPropertyChangeListener(PropertyChangeListener listener) { if (listener == null) throw new NullPointerException(); propertyChangeListeners.add(listener); } /** * Removes a PropertyChangeListener from the model. * * @param listener The old PropertyChangeListener to add. */ public void removePropertyChangeListener(PropertyChangeListener listener) { if (listener == null) throw new NullPointerException(); propertyChangeListeners.remove(listener); } /** * Intercept setSelectionMode calls to fire ProprtyChangeEvents when necessary. */ public void setSelectionMode(int selectionMode) { int oldValue = getSelectionMode(); super.setSelectionMode(selectionMode); int newValue = getSelectionMode(); if (newValue != oldValue && !propertyChangeListeners.isEmpty()) { PropertyChangeEvent e = new PropertyChangeEvent( this, "selectionMode", new Integer(oldValue), new Integer(newValue) ); Object array[] = propertyChangeListeners.toArray(); for (int ctr = 0; ctr < array.length; ctr++) ((PropertyChangeListener)array[ctr]).propertyChange(e); } } }