1 /* 2 * Copyright (c) 1999, 2015, 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™ 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 @SuppressWarnings("serial") // Same-version serialization only 54 public abstract class AbstractCellEditor implements CellEditor, Serializable { 55 56 /** 57 * The list of listeners. 58 */ 59 protected EventListenerList listenerList = new EventListenerList(); 60 /** 61 * The change event. 62 */ 63 protected transient ChangeEvent changeEvent = null; 64 65 // Force this to be implemented. 66 // public Object getCellEditorValue() 67 68 /** 69 * Returns true. 70 * @param e an event object 71 * @return true 72 */ 73 public boolean isCellEditable(EventObject e) { 74 return true; 75 } 76 77 /** 78 * Returns true. 79 * @param anEvent an event object 80 * @return true 81 */ 82 public boolean shouldSelectCell(EventObject anEvent) { 83 return true; 84 } 85 86 /** 87 * Calls <code>fireEditingStopped</code> and returns true. 88 * @return true 89 */ 90 public boolean stopCellEditing() { 91 fireEditingStopped(); 92 return true; 93 } 94 95 /** 96 * Calls <code>fireEditingCanceled</code>. 97 */ 98 public void cancelCellEditing() { 99 fireEditingCanceled(); 100 } 101 102 /** 103 * Adds a <code>CellEditorListener</code> to the listener list. 104 * @param l the new listener to be added 105 */ 106 public void addCellEditorListener(CellEditorListener l) { 107 listenerList.add(CellEditorListener.class, l); 108 } 109 110 /** 111 * Removes a <code>CellEditorListener</code> from the listener list. 112 * @param l the listener to be removed 113 */ 114 public void removeCellEditorListener(CellEditorListener l) { 115 listenerList.remove(CellEditorListener.class, l); 116 } 117 118 /** 119 * Returns an array of all the <code>CellEditorListener</code>s added 120 * to this AbstractCellEditor with addCellEditorListener(). 121 * 122 * @return all of the <code>CellEditorListener</code>s added or an empty 123 * array if no listeners have been added 124 * @since 1.4 125 */ 126 public CellEditorListener[] getCellEditorListeners() { 127 return listenerList.getListeners(CellEditorListener.class); 128 } 129 130 /** 131 * Notifies all listeners that have registered interest for 132 * notification on this event type. The event instance 133 * is created lazily. 134 * 135 * @see EventListenerList 136 */ 137 protected void fireEditingStopped() { 138 // Guaranteed to return a non-null array 139 Object[] listeners = listenerList.getListenerList(); 140 // Process the listeners last to first, notifying 141 // those that are interested in this event 142 for (int i = listeners.length-2; i>=0; i-=2) { 143 if (listeners[i]==CellEditorListener.class) { 144 // Lazily create the event: 145 if (changeEvent == null) 146 changeEvent = new ChangeEvent(this); 147 ((CellEditorListener)listeners[i+1]).editingStopped(changeEvent); 148 } 149 } 150 } 151 152 /** 153 * Notifies all listeners that have registered interest for 154 * notification on this event type. The event instance 155 * is created lazily. 156 * 157 * @see EventListenerList 158 */ 159 protected void fireEditingCanceled() { 160 // Guaranteed to return a non-null array 161 Object[] listeners = listenerList.getListenerList(); 162 // Process the listeners last to first, notifying 163 // those that are interested in this event 164 for (int i = listeners.length-2; i>=0; i-=2) { 165 if (listeners[i]==CellEditorListener.class) { 166 // Lazily create the event: 167 if (changeEvent == null) 168 changeEvent = new ChangeEvent(this); 169 ((CellEditorListener)listeners[i+1]).editingCanceled(changeEvent); 170 } 171 } 172 } 173 }