Fields Summary |
---|
protected TreeCellEditor | realEditorEditor handling the editing. |
protected DefaultTreeCellRenderer | rendererRenderer, used to get border and offsets from. |
protected Container | editingContainerEditing container, will contain the editorComponent . |
protected transient Component | editingComponentComponent used in editing, obtained from the
editingContainer . |
protected boolean | canEditAs of Java 2 platform v1.4 this field should no longer be used. If
you wish to provide similar behavior you should directly override
isCellEditable . |
protected transient int | offsetUsed in editing. Indicates x position to place
editingComponent . |
protected transient JTree | treeJTree instance listening too. |
protected transient TreePath | lastPathLast path that was selected. |
protected transient Timer | timerUsed before starting the editing session. |
protected transient int | lastRowRow that was last passed into
getTreeCellEditorComponent . |
protected Color | borderSelectionColorTrue if the border selection color should be drawn. |
protected transient Icon | editingIconIcon to use when editing. |
protected Font | fontFont to paint with, null indicates
font of renderer is to be used. |
Methods Summary |
---|
public void | actionPerformed(java.awt.event.ActionEvent e)Messaged when the timer fires, this will start the editing
session.
if(tree != null && lastPath != null) {
tree.startEditingAtPath(lastPath);
}
|
public void | addCellEditorListener(javax.swing.event.CellEditorListener l)Adds the CellEditorListener .
realEditor.addCellEditorListener(l);
|
protected boolean | canEditImmediately(java.util.EventObject event)Returns true if event is null ,
or it is a MouseEvent with a click count > 2
and inHitRegion returns true.
if((event instanceof MouseEvent) &&
SwingUtilities.isLeftMouseButton((MouseEvent)event)) {
MouseEvent me = (MouseEvent)event;
return ((me.getClickCount() > 2) &&
inHitRegion(me.getX(), me.getY()));
}
return (event == null);
|
public void | cancelCellEditing()Messages cancelCellEditing to the
realEditor and removes it from this instance.
realEditor.cancelCellEditing();
cleanupAfterEditing();
|
private void | cleanupAfterEditing()Cleans up any state after editing has completed. Removes the
editingComponent the editingContainer .
if (editingComponent != null) {
editingContainer.remove(editingComponent);
}
editingComponent = null;
|
protected java.awt.Container | createContainer()Creates the container to manage placement of
editingComponent .
return new EditorContainer();
|
protected javax.swing.tree.TreeCellEditor | createTreeCellEditor()This is invoked if a TreeCellEditor
is not supplied in the constructor.
It returns a TextField editor.
Border aBorder = UIManager.getBorder("Tree.editorBorder");
DefaultCellEditor editor = new DefaultCellEditor
(new DefaultTextField(aBorder)) {
public boolean shouldSelectCell(EventObject event) {
boolean retValue = super.shouldSelectCell(event);
return retValue;
}
};
// One click to edit.
editor.setClickCountToStart(1);
return editor;
|
protected void | determineOffset(javax.swing.JTree tree, java.lang.Object value, boolean isSelected, boolean expanded, boolean leaf, int row)
if(renderer != null) {
if(leaf)
editingIcon = renderer.getLeafIcon();
else if(expanded)
editingIcon = renderer.getOpenIcon();
else
editingIcon = renderer.getClosedIcon();
if(editingIcon != null)
offset = renderer.getIconTextGap() +
editingIcon.getIconWidth();
else
offset = renderer.getIconTextGap();
}
else {
editingIcon = null;
offset = 0;
}
|
public java.awt.Color | getBorderSelectionColor()Returns the color the border is drawn.
return borderSelectionColor;
|
public javax.swing.event.CellEditorListener[] | getCellEditorListeners()Returns an array of all the CellEditorListener s added
to this DefaultTreeCellEditor with addCellEditorListener().
return ((DefaultCellEditor)realEditor).getCellEditorListeners();
|
public java.lang.Object | getCellEditorValue()Returns the value currently being edited.
return realEditor.getCellEditorValue();
|
public java.awt.Font | getFont()Gets the font used for editing.
return font;
|
public java.awt.Component | getTreeCellEditorComponent(javax.swing.JTree tree, java.lang.Object value, boolean isSelected, boolean expanded, boolean leaf, int row)Configures the editor. Passed onto the realEditor .
setTree(tree);
lastRow = row;
determineOffset(tree, value, isSelected, expanded, leaf, row);
if (editingComponent != null) {
editingContainer.remove(editingComponent);
}
editingComponent = realEditor.getTreeCellEditorComponent(tree, value,
isSelected, expanded,leaf, row);
// this is kept for backwards compatability but isn't really needed
// with the current BasicTreeUI implementation.
TreePath newPath = tree.getPathForRow(row);
canEdit = (lastPath != null && newPath != null &&
lastPath.equals(newPath));
Font font = getFont();
if(font == null) {
if(renderer != null)
font = renderer.getFont();
if(font == null)
font = tree.getFont();
}
editingContainer.setFont(font);
prepareForEditing();
return editingContainer;
|
protected boolean | inHitRegion(int x, int y)Returns true if the passed in location is a valid mouse location
to start editing from. This is implemented to return false if
x is <= the width of the icon and icon gap displayed
by the renderer. In other words this returns true if the user
clicks over the text part displayed by the renderer, and false
otherwise.
if(lastRow != -1 && tree != null) {
Rectangle bounds = tree.getRowBounds(lastRow);
ComponentOrientation treeOrientation = tree.getComponentOrientation();
if ( treeOrientation.isLeftToRight() ) {
if (bounds != null && x <= (bounds.x + offset) &&
offset < (bounds.width - 5)) {
return false;
}
} else if ( bounds != null &&
( x >= (bounds.x+bounds.width-offset+5) ||
x <= (bounds.x + 5) ) &&
offset < (bounds.width - 5) ) {
return false;
}
}
return true;
|
public boolean | isCellEditable(java.util.EventObject event)If the realEditor returns true to this
message, prepareForEditing
is messaged and true is returned.
boolean retValue = false;
boolean editable = false;
if (event != null) {
if (event.getSource() instanceof JTree) {
setTree((JTree)event.getSource());
if (event instanceof MouseEvent) {
TreePath path = tree.getPathForLocation(
((MouseEvent)event).getX(),
((MouseEvent)event).getY());
editable = (lastPath != null && path != null &&
lastPath.equals(path));
if (path!=null) {
lastRow = tree.getRowForPath(path);
Object value = path.getLastPathComponent();
boolean isSelected = tree.isRowSelected(lastRow);
boolean expanded = tree.isExpanded(path);
TreeModel treeModel = tree.getModel();
boolean leaf = treeModel.isLeaf(value);
determineOffset(tree, value, isSelected,
expanded, leaf, lastRow);
}
}
}
}
if(!realEditor.isCellEditable(event))
return false;
if(canEditImmediately(event))
retValue = true;
else if(editable && shouldStartEditingTimer(event)) {
startEditingTimer();
}
else if(timer != null && timer.isRunning())
timer.stop();
if(retValue)
prepareForEditing();
return retValue;
|
protected void | prepareForEditing()Invoked just before editing is to start. Will add the
editingComponent to the
editingContainer .
if (editingComponent != null) {
editingContainer.add(editingComponent);
}
|
private void | readObject(java.io.ObjectInputStream s)
s.defaultReadObject();
Vector values = (Vector)s.readObject();
int indexCounter = 0;
int maxCounter = values.size();
if(indexCounter < maxCounter && values.elementAt(indexCounter).
equals("realEditor")) {
realEditor = (TreeCellEditor)values.elementAt(++indexCounter);
indexCounter++;
}
|
public void | removeCellEditorListener(javax.swing.event.CellEditorListener l)Removes the previously added CellEditorListener .
realEditor.removeCellEditorListener(l);
|
public void | setBorderSelectionColor(java.awt.Color newColor)Sets the color to use for the border.
borderSelectionColor = newColor;
|
public void | setFont(java.awt.Font font)Sets the font to edit with. null indicates
the renderers font should be used. This will NOT
override any font you have set in the editor
the receiver was instantied with. If null
for an editor was passed in a default editor will be
created that will pick up this font.
this.font = font;
|
protected void | setTree(javax.swing.JTree newTree)Sets the tree currently editing for. This is needed to add
a selection listener.
if(tree != newTree) {
if(tree != null)
tree.removeTreeSelectionListener(this);
tree = newTree;
if(tree != null)
tree.addTreeSelectionListener(this);
if(timer != null) {
timer.stop();
}
}
|
public boolean | shouldSelectCell(java.util.EventObject event)Messages the realEditor for the return value.
return realEditor.shouldSelectCell(event);
|
protected boolean | shouldStartEditingTimer(java.util.EventObject event)Returns true if event is a MouseEvent
and the click count is 1.
if((event instanceof MouseEvent) &&
SwingUtilities.isLeftMouseButton((MouseEvent)event)) {
MouseEvent me = (MouseEvent)event;
return (me.getClickCount() == 1 &&
inHitRegion(me.getX(), me.getY()));
}
return false;
|
protected void | startEditingTimer()Starts the editing timer.
if(timer == null) {
timer = new Timer(1200, this);
timer.setRepeats(false);
}
timer.start();
|
public boolean | stopCellEditing()If the realEditor will allow editing to stop,
the realEditor is removed and true is returned,
otherwise false is returned.
if(realEditor.stopCellEditing()) {
cleanupAfterEditing();
return true;
}
return false;
|
public void | valueChanged(javax.swing.event.TreeSelectionEvent e)Resets lastPath .
if(tree != null) {
if(tree.getSelectionCount() == 1)
lastPath = tree.getSelectionPath();
else
lastPath = null;
}
if(timer != null) {
timer.stop();
}
|
private void | writeObject(java.io.ObjectOutputStream s)
Vector values = new Vector();
s.defaultWriteObject();
// Save the realEditor, if its Serializable.
if(realEditor != null && realEditor instanceof Serializable) {
values.addElement("realEditor");
values.addElement(realEditor);
}
s.writeObject(values);
|