diff -r fd16c54261b3 -r 90ce3da70b43 jdk/src/share/classes/javax/swing/CellEditor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/javax/swing/CellEditor.java Sat Dec 01 00:00:00 2007 +0000 @@ -0,0 +1,134 @@ +/* + * Copyright 1997-2005 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +package javax.swing; + +import java.util.EventObject; +import javax.swing.event.*; + +/** + * This interface defines the methods any general editor should be able + * to implement.

+ * + * Having this interface enables complex components (the client of the + * editor) such as JTree and + * JTable to allow any generic editor to + * edit values in a table cell, or tree cell, etc. Without this generic + * editor interface, JTable would have to know about specific editors, + * such as JTextField, JCheckBox, JComboBox, + * etc. In addition, without this interface, clients of editors such as + * JTable would not be able + * to work with any editors developed in the future by the user + * or a 3rd party ISV.

+ * + * To use this interface, a developer creating a new editor can have the + * new component implement the interface. Or the developer can + * choose a wrapper based approach and provide a companion object which + * implements the CellEditor interface (See + * JCellEditor for example). The wrapper approach + * is particularly useful if the user want to use a 3rd party ISV + * editor with JTable, but the ISV didn't implement the + * CellEditor interface. The user can simply create an object + * that contains an instance of the 3rd party editor object and "translate" + * the CellEditor API into the 3rd party editor's API. + * + * @see javax.swing.event.CellEditorListener + * + * @author Alan Chung + */ +public interface CellEditor { + + /** + * Returns the value contained in the editor. + * @return the value contained in the editor + */ + public Object getCellEditorValue(); + + /** + * Asks the editor if it can start editing using anEvent. + * anEvent is in the invoking component coordinate system. + * The editor can not assume the Component returned by + * getCellEditorComponent is installed. This method + * is intended for the use of client to avoid the cost of setting up + * and installing the editor component if editing is not possible. + * If editing can be started this method returns true. + * + * @param anEvent the event the editor should use to consider + * whether to begin editing or not + * @return true if editing can be started + * @see #shouldSelectCell + */ + public boolean isCellEditable(EventObject anEvent); + + /** + * Returns true if the editing cell should be selected, false otherwise. + * Typically, the return value is true, because is most cases the editing + * cell should be selected. However, it is useful to return false to + * keep the selection from changing for some types of edits. + * eg. A table that contains a column of check boxes, the user might + * want to be able to change those checkboxes without altering the + * selection. (See Netscape Communicator for just such an example) + * Of course, it is up to the client of the editor to use the return + * value, but it doesn't need to if it doesn't want to. + * + * @param anEvent the event the editor should use to start + * editing + * @return true if the editor would like the editing cell to be selected; + * otherwise returns false + * @see #isCellEditable + */ + public boolean shouldSelectCell(EventObject anEvent); + + /** + * Tells the editor to stop editing and accept any partially edited + * value as the value of the editor. The editor returns false if + * editing was not stopped; this is useful for editors that validate + * and can not accept invalid entries. + * + * @return true if editing was stopped; false otherwise + */ + public boolean stopCellEditing(); + + /** + * Tells the editor to cancel editing and not accept any partially + * edited value. + */ + public void cancelCellEditing(); + + /** + * Adds a listener to the list that's notified when the editor + * stops, or cancels editing. + * + * @param l the CellEditorListener + */ + public void addCellEditorListener(CellEditorListener l); + + /** + * Removes a listener from the list that's notified + * + * @param l the CellEditorListener + */ + public void removeCellEditorListener(CellEditorListener l); +}