|
Java example source code file (DefaultTreeCellEditor.java)
The DefaultTreeCellEditor.java Java example source code/* * Copyright (c) 1998, 2013, Oracle and/or its affiliates. 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. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package javax.swing.tree; import javax.swing.*; import javax.swing.border.*; import javax.swing.event.*; import javax.swing.plaf.FontUIResource; import java.awt.*; import java.awt.event.*; import java.beans.*; import java.io.*; import java.util.EventObject; import java.util.Vector; /** * A <code>TreeCellEditor. You need to supply an * instance of <code>DefaultTreeCellRenderer * so that the icons can be obtained. You can optionally supply * a <code>TreeCellEditor that will be layed out according * to the icon in the <code>DefaultTreeCellRenderer. * If you do not supply a <code>TreeCellEditor, * a <code>TextField will be used. Editing is started * on a triple mouse click, or after a click, pause, click and * a delay of 1200 milliseconds. *<p> * <strong>Warning: * Serialized objects of this class will not be compatible with * future Swing releases. The current serialization support is * appropriate for short term storage or RMI between applications running * the same version of Swing. As of 1.4, support for long term storage * of all JavaBeans™ * has been added to the <code>java.beans package. * Please see {@link java.beans.XMLEncoder}. * * @see javax.swing.JTree * * @author Scott Violet */ public class DefaultTreeCellEditor implements ActionListener, TreeCellEditor, TreeSelectionListener { /** Editor handling the editing. */ protected TreeCellEditor realEditor; /** Renderer, used to get border and offsets from. */ protected DefaultTreeCellRenderer renderer; /** Editing container, will contain the <code>editorComponent. */ protected Container editingContainer; /** * Component used in editing, obtained from the * <code>editingContainer. */ transient protected Component editingComponent; /** * As of Java 2 platform v1.4 this field should no longer be used. If * you wish to provide similar behavior you should directly override * <code>isCellEditable. */ protected boolean canEdit; /** * Used in editing. Indicates x position to place * <code>editingComponent. */ protected transient int offset; /** <code>JTree instance listening too. */ protected transient JTree tree; /** Last path that was selected. */ protected transient TreePath lastPath; /** Used before starting the editing session. */ protected transient Timer timer; /** * Row that was last passed into * <code>getTreeCellEditorComponent. */ protected transient int lastRow; /** True if the border selection color should be drawn. */ protected Color borderSelectionColor; /** Icon to use when editing. */ protected transient Icon editingIcon; /** * Font to paint with, <code>null indicates * font of renderer is to be used. */ protected Font font; /** * Constructs a <code>DefaultTreeCellEditor * object for a JTree using the specified renderer and * a default editor. (Use this constructor for normal editing.) * * @param tree a <code>JTree object * @param renderer a <code>DefaultTreeCellRenderer object */ public DefaultTreeCellEditor(JTree tree, DefaultTreeCellRenderer renderer) { this(tree, renderer, null); } /** * Constructs a <code>DefaultTreeCellEditor * object for a <code>JTree using the * specified renderer and the specified editor. (Use this constructor * for specialized editing.) * * @param tree a <code>JTree object * @param renderer a <code>DefaultTreeCellRenderer object * @param editor a <code>TreeCellEditor object */ public DefaultTreeCellEditor(JTree tree, DefaultTreeCellRenderer renderer, TreeCellEditor editor) { this.renderer = renderer; realEditor = editor; if(realEditor == null) realEditor = createTreeCellEditor(); editingContainer = createContainer(); setTree(tree); setBorderSelectionColor(UIManager.getColor ("Tree.editorBorderSelectionColor")); } /** * Sets the color to use for the border. * @param newColor the new border color */ public void setBorderSelectionColor(Color newColor) { borderSelectionColor = newColor; } /** * Returns the color the border is drawn. * @return the border selection color */ public Color getBorderSelectionColor() { return borderSelectionColor; } /** * Sets the font to edit with. <code>null indicates * the renderers font should be used. This will NOT * override any font you have set in the editor * the receiver was instantiated with. If <code>null * for an editor was passed in a default editor will be * created that will pick up this font. * * @param font the editing <code>Font * @see #getFont */ public void setFont(Font font) { this.font = font; } /** * Gets the font used for editing. * * @return the editing <code>Font * @see #setFont */ public Font getFont() { return font; } // // TreeCellEditor // /** * Configures the editor. Passed onto the <code>realEditor. */ public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) { 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 compatibility 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; } /** * Returns the value currently being edited. * @return the value currently being edited */ public Object getCellEditorValue() { return realEditor.getCellEditorValue(); } /** * If the <code>realEditor returns true to this * message, <code>prepareForEditing * is messaged and true is returned. */ public boolean isCellEditable(EventObject event) { 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; } /** * Messages the <code>realEditor for the return value. */ public boolean shouldSelectCell(EventObject event) { return realEditor.shouldSelectCell(event); } /** * If the <code>realEditor will allow editing to stop, * the <code>realEditor is removed and true is returned, * otherwise false is returned. */ public boolean stopCellEditing() { if(realEditor.stopCellEditing()) { cleanupAfterEditing(); return true; } return false; } /** * Messages <code>cancelCellEditing to the * <code>realEditor and removes it from this instance. */ public void cancelCellEditing() { realEditor.cancelCellEditing(); cleanupAfterEditing(); } /** * Adds the <code>CellEditorListener. * @param l the listener to be added */ public void addCellEditorListener(CellEditorListener l) { realEditor.addCellEditorListener(l); } /** * Removes the previously added <code>CellEditorListener. * @param l the listener to be removed */ public void removeCellEditorListener(CellEditorListener l) { realEditor.removeCellEditorListener(l); } /** * Returns an array of all the <code>CellEditorListeners added * to this DefaultTreeCellEditor with addCellEditorListener(). * * @return all of the <code>CellEditorListeners added or an empty * array if no listeners have been added * @since 1.4 */ public CellEditorListener[] getCellEditorListeners() { return ((DefaultCellEditor)realEditor).getCellEditorListeners(); } // // TreeSelectionListener // /** * Resets <code>lastPath. */ public void valueChanged(TreeSelectionEvent e) { if(tree != null) { if(tree.getSelectionCount() == 1) lastPath = tree.getSelectionPath(); else lastPath = null; } if(timer != null) { timer.stop(); } } // // ActionListener (for Timer). // /** * Messaged when the timer fires, this will start the editing * session. */ public void actionPerformed(ActionEvent e) { if(tree != null && lastPath != null) { tree.startEditingAtPath(lastPath); } } // // Local methods // /** * Sets the tree currently editing for. This is needed to add * a selection listener. * @param newTree the new tree to be edited */ protected void setTree(JTree newTree) { if(tree != newTree) { if(tree != null) tree.removeTreeSelectionListener(this); tree = newTree; if(tree != null) tree.addTreeSelectionListener(this); if(timer != null) { timer.stop(); } } } /** * Returns true if <code>event is a Other Java examples (source code examples)Here is a short list of links related to this Java DefaultTreeCellEditor.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.