概要
JTree
を検索して、一致するアイテムを選択します。
Screenshot
Advertisement
サンプルコード
protected static void searchTree(
JTree tree, TreePath path, String q,
List<TreePath> rollOverPathLists) {
Object o = path.getLastPathComponent();
if (o instanceof TreeNode) {
TreeNode node = (TreeNode) o;
if (node.toString().startsWith(q)) {
rollOverPathLists.add(path);
tree.expandPath(path.getParentPath());
}
if (!node.isLeaf()) {
// Java 9: Enumeration<TreeNode> e = node.children();
Enumeration<?> e = node.children();
while (e.hasMoreElements()) {
searchTree(tree, path.pathByAddingChild(e.nextElement()),
q, rollOverPathLists);
}
}
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、選択されたJTree
のノード以下に検索文字列と一致するノードを検索してJTree#addSelectionPath(TreePath)
メソッドで選択しています。
- Swing - how to get everything in DefaultTreeNodeのAndre_Uhresさんの投稿のように
TreeModel
を使って検索する方法もある
// <blockquote cite="https://community.oracle.com/thread/1357454">
public void traverse(JTree tree) {
TreeModel model = tree.getModel();
Object root;
if (model != null) {
root = model.getRoot();
walk(model, root);
} else {
System.out.println("Tree is empty.");
}
}
protected void walk(TreeModel model, Object o) {
int cc = model.getChildCount(o);
for (int i = 0; i < cc; i++) {
DefaultMutableTreeNode child = (DefaultMutableTreeNode) model.getChild(o, i);
if (model.isLeaf(child)) {
System.out.println(child);
} else {
System.out.println(child);
walk(model, child);
}
}
}
// </blockquote>
- 以下は
DefaultMutableTreeNode#depthFirstEnumeration()
を使用してbananas
を検索
TreeModel model = tree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
Enumeration depth = root.depthFirstEnumeration();
while (depth.hasMoreElements()) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) depth.nextElement();
if (node != null && "bananas".equals(node.toString())) {
TreePath path = new TreePath(node.getPath());
tree.setSelectionPath(path);
tree.scrollPathToVisible(path);
return;
}
}
参考リンク
- JTreeのノードを展開・折り畳み
- Swing - how to get everything in DefaultTreeNode
- JTreeで条件に一致するノードを検索しハイライト
- JTreeのノードを走査する