javax.swing.tree

## Interface TreeModel

All Known Implementing Classes:
  DefaultTreeModel

    public interface TreeModel

The model used by `JTree`.

`JTree` and its related classes make extensive use of `TreePath`s for indentifying nodes in the `TreeModel`. If a `TreeModel` returns the same object, as compared by `equals`, at two different indices under the same parent than the resulting `TreePath` objects will be considered equal as well. Some implementations may assume that if two `TreePath`s are equal, they identify the same node. If this condition is not met, painting problems and other oddities may result. In other words, if `getChild` for a given parent returns the same Object (as determined by `equals`) problems may result, and it is recommended you avoid doing this.

Similarly `JTree` and its related classes place `TreePath`s in `Map`s. As such if a node is requested twice, the return values must be equal (using the `equals` method) and have the same `hashCode`.

For further information on tree models, including an example of a custom implementation, see How to Use Trees in The Java Tutorial.

See Also:
  `TreePath`

### Method Summary

Methods
`void` `addTreeModelListener(TreeModelListener l)` Adds a listener for the `TreeModelEvent` posted after the tree changes.
`Object` `getChild(Object parent, int index)` Returns the child of `parent` at index `index` in the parent's child array.
`int` `getChildCount(Object parent)` Returns the number of children of `parent`.
`int` `getIndexOfChild(Object parent, Object child)` Returns the index of child in parent.
`Object` `getRoot()` Returns the root of the tree.
`boolean` `isLeaf(Object node)` Returns `true` if `node` is a leaf.
`void` `removeTreeModelListener(TreeModelListener l)` Removes a listener previously added with `addTreeModelListener`.
`void` `valueForPathChanged(TreePath path, Object newValue)` Messaged when the user has altered the value for the item identified by `path` to `newValue`.

### Method Detail

#### getRoot

    Object getRoot()

Returns the root of the tree. Returns `null` only if the tree has no nodes.

Returns:
  the root of the tree

#### getChild

    Object getChild(Object parent,
                  int index)

Returns the child of `parent` at index `index` in the parent's child array. `parent` must be a node previously obtained from this data source. This should not return `null` if `index` is a valid index for `parent` (that is `index >= 0 && index < getChildCount(parent`)).

Parameters:
  `parent` - a node in the tree, obtained from this data source
Returns:
  the child of `parent` at index `index`

#### getChildCount

    int getChildCount(Object parent)

Returns the number of children of `parent`. Returns 0 if the node is a leaf or if it has no children. `parent` must be a node previously obtained from this data source.

Parameters:
  `parent` - a node in the tree, obtained from this data source
Returns:
  the number of children of the node `parent`

#### isLeaf

    boolean isLeaf(Object node)

Returns `true` if `node` is a leaf. It is possible for this method to return `false` even if `node` has no children. A directory in a filesystem, for example, may contain no files; the node representing the directory is not a leaf, but it also has no children.

Parameters:
  `node` - a node in the tree, obtained from this data source
Returns:
  true if `node` is a leaf

#### valueForPathChanged

    void valueForPathChanged(TreePath path,
                           Object newValue)

Messaged when the user has altered the value for the item identified by `path` to `newValue`. If `newValue` signifies a truly new value the model should post a `treeNodesChanged` event.

Parameters:
  `path` - path to the node that the user has altered
  `newValue` - the new value from the TreeCellEditor

#### getIndexOfChild

    int getIndexOfChild(Object parent,
                      Object child)

Returns the index of child in parent. If either `parent` or `child` is `null`, returns -1. If either `parent` or `child` don't belong to this tree model, returns -1.

Parameters:
  `parent` - a node in the tree, obtained from this data source
  `child` - the node we are interested in
Returns:
  the index of the child in the parent, or -1 if either `child` or `parent` are `null` or don't belong to this tree model

#### addTreeModelListener

    void addTreeModelListener(TreeModelListener l)

Adds a listener for the `TreeModelEvent` posted after the tree changes.

Parameters:
  `l` - the listener to add
See Also:
  `removeTreeModelListener(javax.swing.event.TreeModelListener)`

#### removeTreeModelListener

    void removeTreeModelListener(TreeModelListener l)

Removes a listener previously added with `addTreeModelListener`.

Parameters:
  `l` - the listener to remove
See Also:
  `addTreeModelListener(javax.swing.event.TreeModelListener)`

Copyright © 1993, 2017, Oracle and/or its affiliates. All rights reserved.