Index: javax/swing/plaf/basic/BasicTreeUI.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicTreeUI.java,v retrieving revision 1.67 diff -u -r1.67 BasicTreeUI.java --- javax/swing/plaf/basic/BasicTreeUI.java 23 Aug 2005 18:41:01 -0000 1.67 +++ javax/swing/plaf/basic/BasicTreeUI.java 23 Aug 2005 21:04:41 -0000 @@ -736,8 +736,12 @@ */ public boolean stopEditing(JTree tree) { - // FIXME: not implemented - return false; + if (isEditing(tree)) + { + completeEditing(); + return getCellEditor().stopCellEditing(); + } + return true; } /** @@ -747,7 +751,8 @@ */ public void cancelEditing(JTree tree) { - // FIXME: not implemented + if (isEditing(tree)) + completeEditing(false, true, false); } /** @@ -759,7 +764,7 @@ */ public void startEditingAtPath(JTree tree, TreePath path) { - // FIXME: not implemented + startEditing(path, null); } /** @@ -770,8 +775,7 @@ */ public TreePath getEditingPath(JTree tree) { - // FIXME: not implemented - return null; + return editingPath; } /** @@ -948,8 +952,10 @@ */ protected TreeCellEditor createDefaultCellEditor() { - return new DefaultTreeCellEditor( - tree, + if (currentCellRenderer != null) + return new DefaultTreeCellEditor(tree, (DefaultTreeCellRenderer) + currentCellRenderer, cellEditor); + return new DefaultTreeCellEditor(tree, (DefaultTreeCellRenderer) createDefaultCellRenderer(), cellEditor); } @@ -1080,12 +1086,13 @@ /** * Updates the cellEditor based on editability of the JTree that we're - * contained in. Ig the tree is editable but doesn't have a cellEditor, a + * contained in. If the tree is editable but doesn't have a cellEditor, a * basic one will be used. */ protected void updateCellEditor() { - // FIXME: not implemented + if (tree.isEditable() && cellEditor == null) + cellEditor = createDefaultCellEditor(); } /** @@ -1389,7 +1396,7 @@ */ protected void completeEditing() { - // FIXME: not implemented + completeEditing(false, true, false); } /** @@ -1405,7 +1412,19 @@ protected void completeEditing(boolean messageStop, boolean messageCancel, boolean messageTree) { - // FIXME: not implemented + if (messageStop) + { + getCellEditor().stopCellEditing(); + stopEditingInCompleteEditing = true; + } + else if (messageCancel) + { + stopEditingInCompleteEditing = true; + getCellEditor().cancelCellEditing(); + } + else if (messageTree) + tree.getModel().valueForPathChanged(tree.getLeadSelectionPath(), + editingPath); } /** @@ -1418,7 +1437,36 @@ */ protected boolean startEditing(TreePath path, MouseEvent event) { - // FIXME: not implemented + int x; + int y; + if (event == null) + { + Rectangle bounds = getPathBounds(tree, path); + x = bounds.x; + y = bounds.y; + } + else + { + x = event.getX(); + y = event.getY(); + } + + TreeCellEditor ed = getCellEditor(); + if (ed == null) + updateCellEditor(); + if(ed != null && ed.isCellEditable(event) && ed.shouldSelectCell(event)) + { + editingPath = path; + editingRow = tree.getRowForPath(editingPath); + Object val = editingPath.getLastPathComponent(); + boolean isLeaf = tree.getModel().isLeaf(val); + boolean expanded = tree.isExpanded(editingPath); + editingComponent = ed.getTreeCellEditorComponent( + tree, val, true, expanded, isLeaf, editingRow); + cellEditor.addCellEditorListener(cellEditorListener); + stopEditingInCompleteEditing = false; + return true; + } return false; } @@ -1638,6 +1686,11 @@ */ public void editingStopped(ChangeEvent e) { + BasicTreeUI.this.editingPath = null; + BasicTreeUI.this.editingRow = -1; + BasicTreeUI.this.editingComponent = null; + BasicTreeUI.this.cellEditor = null; + BasicTreeUI.this.tree.repaint(); } /** @@ -1648,6 +1701,11 @@ */ public void editingCanceled(ChangeEvent e) { + BasicTreeUI.this.editingPath = null; + BasicTreeUI.this.editingRow = -1; + BasicTreeUI.this.editingComponent = null; + BasicTreeUI.this.cellEditor = null; + BasicTreeUI.this.tree.repaint(); } }// CellEditorHandler Index: javax/swing/tree/DefaultTreeCellEditor.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/tree/DefaultTreeCellEditor.java,v retrieving revision 1.9 diff -u -r1.9 DefaultTreeCellEditor.java --- javax/swing/tree/DefaultTreeCellEditor.java 23 Aug 2005 18:41:01 -0000 1.9 +++ javax/swing/tree/DefaultTreeCellEditor.java 23 Aug 2005 21:04:41 -0000 @@ -538,6 +538,7 @@ { if (realEditor.stopCellEditing()) { + timer.stop(); realEditor = null; return true; } @@ -550,6 +551,7 @@ */ public void cancelCellEditing() { + timer.stop(); realEditor.cancelCellEditing(); realEditor = null; }