---
category: swing
folder: TraverseAllNodes
title: JTreeのノードを走査する
tags: [JTree, Enumeration, TreeModel, DefaultMutableTreeNode]
author: aterai
pubdate: 2012-01-16T15:35:56+09:00
description: JTreeのノードからEnumerationを取得してサブツリーの走査を行います。
image: https://lh5.googleusercontent.com/-m8cdaUCibl0/TxPCZQMYqkI/AAAAAAAABH4/eAK9LyYkv14/s800/TraverseAllNodes.png
---
* 概要 [#summary]
`JTree`のノードから`Enumeration`を取得してサブツリーの走査を行います。

#download(https://lh5.googleusercontent.com/-m8cdaUCibl0/TxPCZQMYqkI/AAAAAAAABH4/eAK9LyYkv14/s800/TraverseAllNodes.png)

* サンプルコード [#sourcecode]
#code(link){{
TreeModel model = tree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
Enumeration<?> e = root.breadthFirstEnumeration();
while (e.hasMoreElements()) {
  DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.nextElement();
  textArea.append(node.toString() + "\n");
}
}}

* 解説 [#explanation]
上記のサンプルでは、この`JTree`の最上位ノードをルートにするサブツリー以下を、深さ優先、幅優先などで全走査しています。

- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/tree/DefaultMutableTreeNode.html#depthFirstEnumeration-- DefaultMutableTreeNode#depthFirstEnumeration()]
-- 深さ優先走査
-- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/tree/DefaultMutableTreeNode.html#postorderEnumeration-- DefaultMutableTreeNode#postorderEnumeration()]の後順走査と同一
-- `blue, violet, red, yellow, colors, basketball, ... , JTree`
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/tree/DefaultMutableTreeNode.html#breadthFirstEnumeration-- DefaultMutableTreeNode#breadthFirstEnumeration()]
-- 幅優先走査
-- `JTree, colors, sports, food, blue, violet, red, ...`
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/tree/DefaultMutableTreeNode.html#preorderEnumeration-- DefaultMutableTreeNode#preorderEnumeration()]
-- 前順走査
-- `JTree, colors, blue, violet, red, yellow, sports, basketball, soccer, ...`

----
- `DefaultMutableTreeNode#children()`や`DefaultMutableTreeNode#xxxxxEnumeration()`などの戻り値は`Java 8`から`9`で以下のように変更される
-- `Java 8`: `Enumeration`
-- `Java 9`: `Enumeration<TreeNode>`
--- [https://bugs.openjdk.java.net/browse/JDK-8043550 JDK-8043550 Fix raw and unchecked lint warnings in javax.swing.* - Java Bug System]
--- [https://bugs.openjdk.org/browse/JDK-8043550 JDK-8043550 Fix raw and unchecked lint warnings in javax.swing.* - Java Bug System]
-- %%`Java 11`: `Enumeration<? extends TreeNode>`%%
--- %%[https://bugs.openjdk.java.net/browse/JDK-8058831 JDK-8058831 Consider changing return type of DefaultMutableTreeNode.children - Java Bug System]%%
--- %%[https://bugs.openjdk.org/browse/JDK-8058831 JDK-8058831 Consider changing return type of DefaultMutableTreeNode.children - Java Bug System]%%

* 参考リンク [#reference]
- [[JTreeのノードを検索する>Swing/SearchBox]]

* コメント [#comment]
#comment
#comment