1 /* 2 * Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javax.swing; 27 28 import javax.swing.event.*; 29 import java.util.EventObject; 30 import java.io.Serializable; 31 32 /** 33 * 34 * A base class for <code>CellEditors</code>, providing default 35 * implementations for the methods in the <code>CellEditor</code> 36 * interface except <code>getCellEditorValue()</code>. 37 * Like the other abstract implementations in Swing, also manages a list 38 * of listeners. 39 * 40 * <p> 41 * <strong>Warning:</strong> 42 * Serialized objects of this class will not be compatible with 43 * future Swing releases. The current serialization support is 44 * appropriate for short term storage or RMI between applications running 45 * the same version of Swing. As of 1.4, support for long term storage 46 * of all JavaBeans<sup><font size="-2">TM</font></sup> 47 * has been added to the <code>java.beans</code> package. 48 * Please see {@link java.beans.XMLEncoder}. 49 * 50 * @author Philip Milne 51 * @since 1.3 52 */ 53 54 public abstract class AbstractCellEditor implements CellEditor, Serializable { 55 56 protected EventListenerList listenerList = new EventListenerList(); 57 transient protected ChangeEvent changeEvent = null; 58 59 // Force this to be implemented. 60 // public Object getCellEditorValue() 61 62 /** 63 * Returns true. 64 * @param e an event object 65 * @return true 66 */ 67 public boolean isCellEditable(EventObject e) { 68 return true; 69 } 70 71 /** 72 * Returns true. 73 * @param anEvent an event object 74 * @return true 75 */ 76 public boolean shouldSelectCell(EventObject anEvent) { 77 return true; 78 } 79 80 /** 81 * Calls <code>fireEditingStopped</code> and returns true. 82 * @return true 83 */ 84 public boolean stopCellEditing() { 85 fireEditingStopped(); 86 return true; 87 } 88 89 /** 90 * Calls <code>fireEditingCanceled</code>. 91 */ 92 public void cancelCellEditing() { 93 fireEditingCanceled(); 94 } 95 96 /** 97 * Adds a <code>CellEditorListener</code> to the listener list. 98 * @param l the new listener to be added 99 */ 100 public void addCellEditorListener(CellEditorListener l) { 101 listenerList.add(CellEditorListener.class, l); 102 } 103 104 /** 105 * Removes a <code>CellEditorListener</code> from the listener list. 106 * @param l the listener to be removed 107 */ 108 public void removeCellEditorListener(CellEditorListener l) { 109 listenerList.remove(CellEditorListener.class, l); 110 } 111 112 /** 113 * Returns an array of all the <code>CellEditorListener</code>s added 114 * to this AbstractCellEditor with addCellEditorListener(). 115 * 116 * @return all of the <code>CellEditorListener</code>s added or an empty 117 * array if no listeners have been added 118 * @since 1.4 119 */ 120 public CellEditorListener[] getCellEditorListeners() { 121 return (CellEditorListener[])listenerList.getListeners( 122 CellEditorListener.class); 123 } 124 125 /** 126 * Notifies all listeners that have registered interest for 127 * notification on this event type. The event instance 128 * is created lazily. 129 * 130 * @see EventListenerList 131 */ 132 protected void fireEditingStopped() { 133 // Guaranteed to return a non-null array 134 Object[] listeners = listenerList.getListenerList(); 135 // Process the listeners last to first, notifying 136 // those that are interested in this event 137 for (int i = listeners.length-2; i>=0; i-=2) { 138 if (listeners[i]==CellEditorListener.class) { 139 // Lazily create the event: 140 if (changeEvent == null) 141 changeEvent = new ChangeEvent(this); 142 ((CellEditorListener)listeners[i+1]).editingStopped(changeEvent); 143 } 144 } 145 } 146 147 /** 148 * Notifies all listeners that have registered interest for 149 * notification on this event type. The event instance 150 * is created lazily. 151 * 152 * @see EventListenerList 153 */ 154 protected void fireEditingCanceled() { 155 // Guaranteed to return a non-null array 156 Object[] listeners = listenerList.getListenerList(); 157 // Process the listeners last to first, notifying 158 // those that are interested in this event 159 for (int i = listeners.length-2; i>=0; i-=2) { 160 if (listeners[i]==CellEditorListener.class) { 161 // Lazily create the event: 162 if (changeEvent == null) 163 changeEvent = new ChangeEvent(this); 164 ((CellEditorListener)listeners[i+1]).editingCanceled(changeEvent); 165 } 166 } 167 } 168 }