/* * Copyright (c) 1997, 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 java.awt.Component; import javax.swing.JTree; /** * Defines the requirements for an object that displays a tree node. * See <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Trees</a> * in <em>The Java Tutorial</em> * for an example of implementing a tree cell renderer * that displays custom icons. * * @author Rob Davis * @author Ray Ryan * @author Scott Violet */ public interface TreeCellRenderer { /** * Sets the value of the current tree cell to <code>value</code>. * If <code>selected</code> is true, the cell will be drawn as if * selected. If <code>expanded</code> is true the node is currently * expanded and if <code>leaf</code> is true the node represents a * leaf and if <code>hasFocus</code> is true the node currently has * focus. <code>tree</code> is the <code>JTree</code> the receiver is being * configured for. Returns the <code>Component</code> that the renderer * uses to draw the value. * <p> * The <code>TreeCellRenderer</code> is also responsible for rendering the * the cell representing the tree's current DnD drop location if * it has one. If this renderer cares about rendering * the DnD drop location, it should query the tree directly to * see if the given row represents the drop location: * <pre> * JTree.DropLocation dropLocation = tree.getDropLocation(); * if (dropLocation != null * && dropLocation.getChildIndex() == -1 * && tree.getRowForPath(dropLocation.getPath()) == row) { * * // this row represents the current drop location * // so render it specially, perhaps with a different color * } * </pre> * * @param tree the receiver is being configured for * @param value the value to render * @param selected whether node is selected * @param expanded whether node is expanded * @param leaf whether node is a lead node * @param row row index * @param hasFocus whether node has focus * @return the {@code Component} that the renderer uses to draw the value */ Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus); }