1/*
2 * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package javax.swing.tree;
27
28import java.util.Enumeration;
29
30/**
31 * Defines the requirements for an object that can be used as a
32 * tree node in a JTree.
33 * <p>
34 * Implementations of <code>TreeNode</code> that override <code>equals</code>
35 * will typically need to override <code>hashCode</code> as well.  Refer
36 * to {@link javax.swing.tree.TreeModel} for more information.
37 *
38 * For further information and examples of using tree nodes,
39 * see <a
40 href="http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html">How to Use Tree Nodes</a>
41 * in <em>The Java Tutorial.</em>
42 *
43 * @author Rob Davis
44 * @author Scott Violet
45 */
46
47public interface TreeNode
48{
49    /**
50     * Returns the child <code>TreeNode</code> at index
51     * <code>childIndex</code>.
52     *
53     * @param   childIndex  index of child
54     * @return              the child node at given index
55     */
56    TreeNode getChildAt(int childIndex);
57
58    /**
59     * Returns the number of children <code>TreeNode</code>s the receiver
60     * contains.
61     *
62     * @return              the number of children the receiver contains
63     */
64    int getChildCount();
65
66    /**
67     * Returns the parent <code>TreeNode</code> of the receiver.
68     *
69     * @return              the parent of the receiver
70     */
71    TreeNode getParent();
72
73    /**
74     * Returns the index of <code>node</code> in the receivers children.
75     * If the receiver does not contain <code>node</code>, -1 will be
76     * returned.
77     *
78     * @param   node        node to be loked for
79     * @return              index of specified node
80     */
81    int getIndex(TreeNode node);
82
83    /**
84     * Returns true if the receiver allows children.
85     *
86     * @return              whether the receiver allows children
87     */
88    boolean getAllowsChildren();
89
90    /**
91     * Returns true if the receiver is a leaf.
92     *
93     * @return              whether the receiver is a leaf
94     */
95    boolean isLeaf();
96
97    /**
98     * Returns the children of the receiver as an <code>Enumeration</code>.
99     *
100     * @return              the children of the receiver as an {@code Enumeration}
101     */
102    Enumeration<? extends TreeNode> children();
103}
104