Swing/ExpandAllNodes のバックアップの現在との差分(No.13)
- category: swing folder: ExpandAllNodes title: JTreeのノードを展開・折り畳み tags: [JTree, TreeNode, TreePath] author: aterai pubdate: 2007-05-07T17:11:21+09:00 description: JTreeのすべてのノードに対して、展開、折り畳みを行います。 image:
概要
JTree
のすべてのノードに対して、展開、折り畳みを行います。
Screenshot
Advertisement
サンプルコード
#spandel
//@see http://www.rgagnon.com/javadetails/java-0210.html
#spanend
#spandel
//Expand or collapse a JTree - Real's Java How-to
#spanend
private void expandAll(JTree tree) {
int row = 0;
while (row < tree.getRowCount()) {
tree.expandRow(row);
row++;
}
}
#spanadd
#spanend
private void collapseAll(JTree tree) {
int row = tree.getRowCount() - 1;
while (row >= 0) {
tree.collapseRow(row);
row--;
}
}
private void visitAll(JTree tree, TreePath parent, boolean expand) {
TreeNode node = (TreeNode) parent.getLastPathComponent();
//children(node).forEach(n -> visitAll(tree, parent.pathByAddingChild(n), expand));
if (!node.isLeaf() && node.getChildCount() >= 0) {
// children(node).forEach(n -> visitAll(tree, parent.pathByAddingChild(n), expand));
if (!node.isLeaf()) {
// Java 9: Enumeration<TreeNode> e = node.children();
Enumeration<?> e = node.children();
while (e.hasMoreElements()) {
visitAll(tree, parent.pathByAddingChild(e.nextElement()), expand);
}
}
if (expand) {
tree.expandPath(parent);
} else {
tree.collapsePath(parent);
}
}
#spandel
//private static Stream<TreeNode> children(TreeNode node) {
#spanend
#spandel
// return Collections.list((Enumeration<?>) node.children())
#spanend
#spandel
// .stream().filter(TreeNode.class::isInstance).map(TreeNode.class::cast);
#spanend
#spandel
//}
#spanend
#spanadd
// private static Stream<TreeNode> children(TreeNode node) {
#spanend
#spanadd
// // Java 9:
#spanend
#spanadd
// // return Collections.list(node.children()).stream();
#spanend
#spanadd
// // Java 8:
#spanend
#spanadd
// return Collections.list((Enumeration<?>) node.children())
#spanend
#spanadd
// .stream().filter(TreeNode.class::isInstance).map(TreeNode.class::cast);
#spanend
#spanadd
// }
#spanend
View in GitHub: Java, Kotlin解説
expandAll(A)
JTree
をリストとみなしてexpandAll
では先頭から順番にJTree#expandRow(int)
メソッドを実行- ループは全展開された時の
JTree
の行数だけ繰り返す
collapseAll(A)
- 末尾から順番に
JTree#collapseRow(int)
メソッドを実行し、表示されているすべてのノードを折り畳む - 子ノードは展開されているが、親ノードが折り畳まれている場合、その非表示となっている子ノードに対しては折り畳みを実行しない
- 末尾から順番に
- 子ノードは展開されているが親ノードが折り畳まれている場合、その非表示となっている子ノードに対しては折り畳みを実行しない
expandAll(B)
visitAll(tree, new TreePath(root), true);
- 再帰的に
TreePath
を辿って、展開(JTree#expandPath(TreePath)
メソッド)を実行
- 再帰的に
TreePath
を辿って展開(JTree#expandPath(TreePath)
メソッド)を実行
collapseAll(B)
visitAll(tree, new TreePath(root), false);
- 再帰的に
TreePath
を辿って、折り畳み(JTree#collapsePath(TreePath)
メソッド)を実行 - 再帰的に
TreePath
を辿って折り畳み(JTree#collapsePath(TreePath)
メソッド)を実行
参考リンク
- Expand or collapse a JTree - Real's Java How-to
- Expand or collapse a JTree - Real's Java How-to
- JTreeのノードを検索する