Swing/ExpandAllNodes のバックアップ(No.4)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ExpandAllNodes へ行く。
- 1 (2007-05-07 (月) 17:11:21)
- 2 (2008-02-05 (火) 19:31:06)
- 3 (2008-03-30 (日) 03:02:57)
- 4 (2012-01-12 (木) 16:17:44)
- 5 (2012-11-21 (水) 21:48:29)
- 6 (2013-02-06 (水) 02:10:28)
- 7 (2014-05-09 (金) 12:10:32)
- 8 (2014-05-15 (木) 19:09:20)
- 9 (2014-11-07 (金) 03:21:30)
- 10 (2015-02-12 (木) 15:47:44)
- 11 (2016-11-01 (火) 19:52:19)
- 12 (2017-02-07 (火) 20:52:40)
- 13 (2017-12-22 (金) 17:42:05)
- 14 (2018-03-30 (金) 16:10:48)
- 15 (2018-09-25 (火) 15:38:27)
- 16 (2020-09-26 (土) 17:30:11)
- 17 (2022-05-24 (火) 09:57:17)
TITLE:JTreeのノードを展開・折り畳み
Posted by aterai at 2007-05-07
JTreeのノードを展開・折り畳み
JTreeのすべてのノードに対して、展開、折り畳みを行います。
- &jnlp;
- &jar;
- &zip;
サンプルコード
private void expandAll(JTree tree) {
int row = 0;
while(row<tree.getRowCount()) {
tree.expandRow(row);
row++;
}
}
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();
if(!node.isLeaf() && node.getChildCount()>=0) {
Enumeration e = node.children();
while(e.hasMoreElements()) {
TreeNode n = (TreeNode)e.nextElement();
TreePath path = parent.pathByAddingChild(n);
visitAll(tree, path, expand);
}
}
if(expand) tree.expandPath(parent);
else tree.collapsePath(parent);
}
解説
- expandAll(A)
- JTreeをリストとみなしてexpandAllでは先頭から順番にJTree#expandRow(int)メソッドを実行しています。
- ループは全展開された時のJTreeの行インデックス数だけ繰り返されます。
- collapseAll(A)
- 末尾から順番にJTree#collapseRow(int)メソッドを実行し、見かけ上すべてのノードを折り畳みます。
- 子ノードは展開されているが、親ノードが折り畳まれている場合、その子ノードは折り畳まれません。
- expandAll(B), collapseAll(B)
- visitAll(tree, new TreePath(root), true);
- visitAll(tree, new TreePath(root), false);
- 再帰的にTreePathを辿って、JTree#expandPath(TreePath)、JTree#pacollapsePath(TreePath)メソッドを実行することで、展開、折り畳みを行っています。
参考リンク
- Expanding or Collapsing All Nodes in a JTree Component (Java Developers Almanac Example)
- Expand or collapse a JTree - Real's Java How-to
コメント
- 解説のラベルAとBが、ソースとは逆になっていたのを修正しました。 -- aterai