org.jdesktop.swingx.treetable
Class TreeTableCellEditor
java.lang.Object
   javax.swing.AbstractCellEditor
javax.swing.AbstractCellEditor
       javax.swing.DefaultCellEditor
javax.swing.DefaultCellEditor
           org.jdesktop.swingx.treetable.TreeTableCellEditor
org.jdesktop.swingx.treetable.TreeTableCellEditor
- All Implemented Interfaces: 
- Serializable, CellEditor, TableCellEditor, TreeCellEditor
- public class TreeTableCellEditor 
- extends DefaultCellEditor
An editor that can be used to edit the tree column. This extends
 DefaultCellEditor and uses a JTextField (actually, TreeTableTextField)
 to perform the actual editing.
 
To support editing of the tree column we can not make the tree
 editable. The reason this doesn't work is that you can not use
 the same component for editing and renderering. The table may have
 the need to paint cells, while a cell is being edited. If the same
 component were used for the rendering and editing the component would
 be moved around, and the contents would change. When editing, this
 is undesirable, the contents of the text field must stay the same,
 including the caret blinking, and selections persisting. For this
 reason the editing is done via a TableCellEditor.
 
Another interesting thing to be aware of is how tree positions
 its render and editor. The render/editor is responsible for drawing the
 icon indicating the type of node (leaf, branch...). The tree is
 responsible for drawing any other indicators, perhaps an additional
 +/- sign, or lines connecting the various nodes. So, the renderer
 is positioned based on depth. On the other hand, table always makes
 its editor fill the contents of the cell. To get the allusion
 that the table cell editor is part of the tree, we don't want the
 table cell editor to fill the cell bounds. We want it to be placed
 in the same manner as tree places it editor, and have table message
 the tree to paint any decorations the tree wants. Then, we would
 only have to worry about the editing part. The approach taken
 here is to determine where tree would place the editor, and to override
 the reshape method in the JTextField component to
 nudge the textfield to the location tree would place it. Since
 JXTreeTable will paint the tree behind the editor everything should
 just work. So, that is what we are doing here. Determining of
 the icon position will only work if the TreeCellRenderer is
 an instance of DefaultTreeCellRenderer. If you need custom
 TreeCellRenderers, that don't descend from DefaultTreeCellRenderer,
 and you want to support editing in JXTreeTable, you will have
 to do something similiar.
- See Also:
- Serialized Form
 
 
 
 
 
 
 
 
 
| Methods inherited from class java.lang.Object | 
| clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | 
 
 
 
TreeTableCellEditor
public TreeTableCellEditor(JTree tree)
getTableCellEditorComponent
public Component getTableCellEditorComponent(JTable table,
                                             Object value,
                                             boolean isSelected,
                                             int row,
                                             int column)
- Overriden to determine an offset that tree would place the editor at. The
 offset is determined from the getRowBoundsJTree method,
 and additionaly from the icon DefaultTreeCellRenderer will use.
 The offset is then set on the TreeTableTextField component created in the
 constructor, and returned.
 
 
- 
- Specified by:
- getTableCellEditorComponentin interface- TableCellEditor
- Overrides:
- getTableCellEditorComponentin class- DefaultCellEditor
 
- 
 
initEditorOffset
protected void initEditorOffset(JTable table,
                                int row,
                                int column,
                                boolean isSelected)
- 
- Parameters:
- row-
- isSelected-
 
isCellEditable
public boolean isCellEditable(EventObject e)
- This is overriden to forward the event to the tree. This will
 return true if the click count >= clickCountToStart, or the event is null.
 
- 
- Specified by:
- isCellEditablein interface- CellEditor
- Overrides:
- isCellEditablein class- DefaultCellEditor
 
-