Index: javax/swing/DefaultCellEditor.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/DefaultCellEditor.java,v retrieving revision 1.13 diff -u -r1.13 DefaultCellEditor.java --- javax/swing/DefaultCellEditor.java 23 Aug 2005 18:41:01 -0000 1.13 +++ javax/swing/DefaultCellEditor.java 24 Aug 2005 20:26:47 -0000 @@ -121,7 +121,7 @@ */ public boolean isCellEditable(EventObject event) { - if (!(event instanceof MouseEvent)) + if (event == null || !(event instanceof MouseEvent)) return true; //Todo: if the right number of clicks has occured, return true; @@ -381,7 +381,7 @@ delegate = new EditorDelegate(); ((JComboBox)editorComponent).addActionListener(delegate); } - + return editorComponent; } // getTreeCellEditorComponent() Index: javax/swing/plaf/basic/BasicTextUI.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicTextUI.java,v retrieving revision 1.31 diff -u -r1.31 BasicTextUI.java --- javax/swing/plaf/basic/BasicTextUI.java 17 Aug 2005 19:59:35 -0000 1.31 +++ javax/swing/plaf/basic/BasicTextUI.java 24 Aug 2005 20:26:47 -0000 @@ -959,8 +959,9 @@ */ protected Rectangle getVisibleEditorRect() { - int width = textComponent.getWidth(); - int height = textComponent.getHeight(); + Dimension d = textComponent.getPreferredSize(); + int width = d.width; + int height = d.height; if (width <= 0 || height <= 0) return null; Index: javax/swing/tree/DefaultTreeCellEditor.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/tree/DefaultTreeCellEditor.java,v retrieving revision 1.10 diff -u -r1.10 DefaultTreeCellEditor.java --- javax/swing/tree/DefaultTreeCellEditor.java 23 Aug 2005 21:17:39 -0000 1.10 +++ javax/swing/tree/DefaultTreeCellEditor.java 24 Aug 2005 20:26:47 -0000 @@ -47,6 +47,7 @@ import java.awt.Graphics; import java.awt.Insets; import java.awt.Rectangle; +import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; @@ -55,6 +56,7 @@ import java.io.ObjectOutputStream; import java.util.EventObject; +import javax.swing.CellRendererPane; import javax.swing.DefaultCellEditor; import javax.swing.Icon; import javax.swing.JCheckBox; @@ -124,41 +126,23 @@ Rectangle vr = new Rectangle(); Rectangle ir = new Rectangle(); Rectangle tr = new Rectangle(); - + FontMetrics fm = editingComponent.getToolkit().getFontMetrics(getFont()); SwingUtilities.layoutCompoundLabel(((JComponent) editingComponent), fm, - ((JTextField) editingComponent).getText(), - editingIcon, (int) CENTER_ALIGNMENT, - (int) LEFT_ALIGNMENT, (int) CENTER_ALIGNMENT, - (int) LEFT_ALIGNMENT, vr, ir, tr, 4); - + ((JTextField) editingComponent).getText(), editingIcon, + JTextField.LEFT, JTextField.LEFT, JTextField.LEFT, JTextField.LEFT, + vr, ir, tr, 4); + Rectangle cr = tr.union(ir); - tr.width += offset; + cr.width += offset; // paint icon - DefaultTreeCellEditor.this.editingIcon.paintIcon(DefaultTreeCellEditor.this.editingComponent, - g, cr.x, cr.y); - - // paint background - Insets insets = new Insets(0, 0, 0, 0); - Border border = UIManager.getLookAndFeelDefaults(). - getBorder("Tree.editorBorder"); - if (border != null) - insets = border.getBorderInsets(this); - - g.setColor(UIManager.getLookAndFeelDefaults(). - getColor("Tree.selectionBackground")); - g.fillRect(cr.x, cr.y, cr.width, cr.height - insets.top - insets.bottom); - - // paint border - if (borderSelectionColor != null) - { - g.setColor(borderSelectionColor); - g.drawRect(cr.x, cr.y, cr.width, cr.height - insets.top - - insets.bottom); - } + if (DefaultTreeCellEditor.this.editingIcon != null) + DefaultTreeCellEditor.this.editingIcon.paintIcon(DefaultTreeCellEditor. + this.editingComponent, g, cr.x, cr.y); super.paint(g); + (new CellRendererPane()).paintComponent(g, editingComponent, this, cr); } /** @@ -246,7 +230,7 @@ } private EventListenerList listenerList = new EventListenerList(); - + /** * Editor handling the editing. */ @@ -344,7 +328,29 @@ if (editor == null) editor = createTreeCellEditor(); + realEditor = editor; + configureEditingComponent(tree, renderer, realEditor); + + editingContainer = createContainer(); + UIDefaults defaults = UIManager.getLookAndFeelDefaults(); + setFont(defaults.getFont("Tree.font")); + setBorderSelectionColor(defaults.getColor("Tree.selectionBorderColor")); + editingIcon = renderer.getIcon(); + timer = new javax.swing.Timer(1200, this); + } + + /** + * Configures the editing component whenever it is null. + * + * @param tree- the tree to configure to component for. + * @param renderer- the renderer used to set up the nodes + * @param editor- the editor used + */ + private void configureEditingComponent(JTree tree, + DefaultTreeCellRenderer renderer, + TreeCellEditor editor) + { if (tree != null) { lastPath = tree.getSelectionPath(); @@ -355,19 +361,15 @@ boolean isLeaf = tree.getModel().isLeaf(val); boolean expanded = tree.isExpanded(lastPath); determineOffset(tree, val, true, expanded, isLeaf, lastRow); - editingComponent = editor.getTreeCellEditorComponent( - tree, val, true, expanded, isLeaf, lastRow); + editingComponent = editor.getTreeCellEditorComponent(tree, val, + true, + expanded, + isLeaf, + lastRow); } } - - editingContainer = createContainer(); - UIDefaults defaults = UIManager.getLookAndFeelDefaults(); - setFont(defaults.getFont("Tree.font")); - setBorderSelectionColor(defaults.getColor("Tree.selectionBorderColor")); - editingIcon = renderer.getIcon(); - timer = new javax.swing.Timer(1200, this); } - + /** * writeObject * @param value0 TODO @@ -457,36 +459,16 @@ boolean isSelected, boolean expanded, boolean leaf, int row) { - if (tree != null && value != null) - { - editingComponent = (Component) value; + if (realEditor == null) + createTreeCellEditor(); + + Component c = realEditor.getTreeCellEditorComponent(tree, value, isSelected, + expanded, leaf, row); + if (tree != null && editingComponent != null) if (tree.isEditing()) tree.stopEditing(); - if (editingComponent instanceof JTextField) - { - ((JTextField) editingComponent).setText(value.toString()); - realEditor = this; - ((JTextField) editingComponent).addActionListener(this); - canEdit = true; - } - else if (editingComponent instanceof JComboBox) - { - ((JComboBox) editingComponent).setSelectedItem(value.toString()); - realEditor = this; - ((JComboBox) editingComponent).addActionListener((JComboBox) - editingComponent); - canEdit = true; - } - else if (editingComponent instanceof JCheckBox) - { - ((JCheckBox) editingComponent).setText(value.toString()); - realEditor = this; - ((JCheckBox) editingComponent).addActionListener(this); - canEdit = true; - } - } - return editingComponent; + return c; } /** @@ -507,8 +489,11 @@ * @return true if editing can be started */ public boolean isCellEditable(EventObject event) - { - if (canEdit && canEditImmediately(event) && realEditor.isCellEditable(event)) + { + if (editingComponent == null) + configureEditingComponent(tree, renderer, realEditor); + + if (realEditor.isCellEditable(event)) { prepareForEditing(); return true; @@ -526,7 +511,7 @@ */ public boolean shouldSelectCell(EventObject event) { - return realEditor.shouldSelectCell(event); + return true; } /** @@ -535,11 +520,14 @@ * @return true if editing was stopped; false otherwise */ public boolean stopCellEditing() - { + { + if (editingComponent == null) + configureEditingComponent(tree, renderer, realEditor); + if (realEditor.stopCellEditing()) { timer.stop(); - realEditor = null; + tree.setCellEditor(null); return true; } return false; @@ -550,10 +538,13 @@ * from this instance. */ public void cancelCellEditing() - { + { + if (editingComponent == null) + configureEditingComponent(tree, renderer, realEditor); + timer.stop(); realEditor.cancelCellEditing(); - realEditor = null; + tree.setCellEditor(null); } /** @@ -746,8 +737,9 @@ protected TreeCellEditor createTreeCellEditor() { UIDefaults defaults = UIManager.getLookAndFeelDefaults(); - return new DefaultCellEditor(new DefaultTreeCellEditor. - DefaultTextField(defaults.getBorder - ("Tree.selectionBorder"))); + realEditor = new DefaultCellEditor(new DefaultTreeCellEditor.DefaultTextField( + defaults.getBorder("Tree.selectionBorder"))); + canEdit = true; + return realEditor; } }