001 package ui.editor;
002
003 import java.awt.Component;
004 import java.awt.event.*;
005 import java.awt.AWTEvent;
006 import javax.swing.*;
007 import javax.swing.event.*;
008 import java.util.EventObject;
009 import java.io.Serializable;
010
011 /** Used by JTreeTable.
012 */
013 public class AbstractCellEditor implements CellEditor {
014
015 protected EventListenerList listenerList = new EventListenerList();
016
017 public Object getCellEditorValue() { return null; }
018 public boolean isCellEditable(EventObject e) { return true; }
019 public boolean shouldSelectCell(EventObject anEvent) { return false; }
020 public boolean stopCellEditing() { return true; }
021 public void cancelCellEditing() {}
022
023 public void addCellEditorListener(CellEditorListener l) {
024 listenerList.add(CellEditorListener.class, l);
025 }
026
027 public void removeCellEditorListener(CellEditorListener l) {
028 listenerList.remove(CellEditorListener.class, l);
029 }
030
031 /**
032 * Notify all CellEditorListeners that have registered interest for
033 * notification on this event type.
034 * @see EventListenerList
035 */
036 protected void fireEditingStopped() {
037 // Guaranteed to return a non-null array
038 Object[] listeners = listenerList.getListenerList();
039 // Process the listeners last to first, notifying
040 // those that are interested in this event
041 for (int i = listeners.length - 2; i >= 0; i-=2) {
042 if (listeners[i] == CellEditorListener.class) {
043 ((CellEditorListener)listeners[i+1]).editingStopped(new ChangeEvent(this));
044 }
045 }
046 }
047
048 protected void fireEditingCanceled() {
049 Object[] listeners = listenerList.getListenerList();
050 for (int i = listeners.length - 2; i >= 0; i-=2) {
051 if (listeners[i] == CellEditorListener.class) {
052 ((CellEditorListener)listeners[i+1]).editingCanceled(new ChangeEvent(this));
053 }
054 }
055 }
056 }