package com.Util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JTree;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
public class FindInTree{
public static void findInTree(JTree tree,String str){
Object root = tree.getModel().getRoot();
TreePath treePath = new TreePath(root);
treePath = findInPath(tree,treePath, str);
if (treePath != null) {
tree.setSelectionPath(treePath);
tree.scrollPathToVisible(treePath);
}
}
private static TreePath findInPath(JTree tree,TreePath treePath, String str){
Object object = treePath.getLastPathComponent();
if (object == null) {
return null;
}
String value = object.toString();
Pattern p = Pattern.compile(str);
Matcher m = p.matcher(value);
// 查找相应的字符串
//if (str.equals(value)) {
if(m.find()){
return treePath;
}else {
TreeModel model = tree.getModel();
int n = model.getChildCount(object);
for (int i = 0; i < n; i++) {
Object child = model.getChild(object, i);
TreePath path = treePath.pathByAddingChild(child);
path = findInPath(tree,path, str);
if (path != null) {
return path;
}
}
return null;
}
}
}
注:通过正则表达式匹配关键词和当前节点名称是否相同
Pattern p = Pattern.compile(str); Matcher m = p.matcher(value); // 查找相应的字符串 m.find()





Comments | NOTHING