# 如何编写树模型侦听器

> 原文： [https://docs.oracle.com/javase/tutorial/uiswing/events/treemodellistener.html](https://docs.oracle.com/javase/tutorial/uiswing/events/treemodellistener.html)

通过实现树模型侦听器，您可以检测[树](../components/tree.html)显示的数据何时发生更改。您可以使用树模型侦听器来检测用户何时编辑树节点。所有通知都描述了相对于树中节点的更改。有关详细信息，请阅读[动态更改树](../components/tree.html#dynamic)。

_`TreeModelListener`没有适配器类。_

| 方法 | 目的 |
| :-- | :-- |
| [treeNodesChanged（TreeModelEvent）](https://docs.oracle.com/javase/8/docs/api/javax/swing/event/TreeModelListener.html#treeNodesChanged-javax.swing.event.TreeModelEvent-) | 当一个或多个兄弟节点以某种方式发生变化时调用。 |
| [treeNodesInserted（TreeModelEvent）](https://docs.oracle.com/javase/8/docs/api/javax/swing/event/TreeModelListener.html#treeNodesInserted-javax.swing.event.TreeModelEvent-) | 在将节点插入树中后调用。 |
| [treeNodesRemoved（TreeModelEvent）](https://docs.oracle.com/javase/8/docs/api/javax/swing/event/TreeModelListener.html#treeNodesRemoved-javax.swing.event.TreeModelEvent-) | 从树中删除节点后调用。 |
| [treeStructureChanged（TreeModelEvent）](https://docs.oracle.com/javase/8/docs/api/javax/swing/event/TreeModelListener.html#treeStructureChanged-javax.swing.event.TreeModelEvent-) | 在树的结构从当前节点向下彻底改变之后调用。此事件适用于连接到此节点的所有节点。 |

| 方法 | 目的 |
| :-- | :-- |
| [对象 getSource（）](https://docs.oracle.com/javase/8/docs/api/java/util/EventObject.html#getSource--)
（`java.util.EventObject` 中的 _）_ | 返回触发事件的对象。 |
| [int [] getChildIndices（）](https://docs.oracle.com/javase/8/docs/api/javax/swing/event/TreeModelEvent.html#getChildIndices--) | 对于`treeNodesChanged`，`treeNodesInserted`和`treeNodesRemoved`，分别返回已更改，已插入或已删除节点的索引。返回对`treeStructureChanged`没有用的东西。 |
| [Object [] getChildren（）](https://docs.oracle.com/javase/8/docs/api/javax/swing/event/TreeModelEvent.html#getChildren--) | 返回与子索引对应的对象。 |
| [Object [] getPath（）](https://docs.oracle.com/javase/8/docs/api/javax/swing/event/TreeModelEvent.html#getPath--) | 返回已更改，已插入或已删除节点的父节点的路径。对于`treeStructureChanged`，返回结构已更改的节点的路径。 |
| [TreePath getTreePath（）](https://docs.oracle.com/javase/8/docs/api/javax/swing/event/TreeModelEvent.html#getTreePath--) | 返回与`getPath`相同的内容，但返回 [`TreePath`](https://docs.oracle.com/javase/8/docs/api/javax/swing/tree/TreePath.html) 对象。 |

下表列出了使用树扩展侦听器的示例。

| 例 | 在哪里描述 | 笔记 |
| :-- | :-- | :-- |
| [`DynamicTreeDemo`](../examples/components/index.html#DynamicTreeDemo) | [如何使用树木](../components/tree.html#dynamic) | `DynamicTree`类实现树模型侦听器，以检测用户何时编辑了节点的数据。 |