JTree 的分层模糊查找 如何实现树的分层模糊查找,比如给定String str和int layer,如果存在模糊等于该值的节点就选中该节点否则返回null其中layer为在第layer层节点中查找 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 知道是要用到递归,可是我还是不会,有空帮我看看吧,我把例子拷贝上。请补全方法findTree(String str,int layer);package pkg;import javax.swing.*;import java.awt.*;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing.tree.*;public class MainFrm extends JFrame { private JPanel jContentPanel = null; private JSplitPane jSplitPane = null; private JPanel jPanelLeft = null; private JScrollPane jScrollPane = null; private JPanel jPanelRight = null; private JTextField jTextField = null; private JTree jTree = null; private JButton jButton = null; public MainFrm(){ super(); init(); } private void init(){ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setExtendedState(MAXIMIZED_BOTH); this.setContentPane(getJContentPanel()); this.setTitle("查找树中节点的例子"); } private JPanel getJContentPanel(){ if(jContentPanel == null){ jContentPanel = new JPanel(); jContentPanel.setLayout(new BorderLayout()); jContentPanel.add(getJSplitPane(),BorderLayout.CENTER); } return jContentPanel; } private JSplitPane getJSplitPane(){ if(jSplitPane == null){ jSplitPane = new JSplitPane(); jSplitPane.setDividerLocation(200); jSplitPane.add(getJPanelLeft(),JSplitPane.LEFT); jSplitPane.add(getJPanelRight(),JSplitPane.RIGHT); } return jSplitPane; } private JPanel getJPanelLeft(){ if(jPanelLeft == null){ jPanelLeft = new JPanel(); jPanelLeft.setLayout(new BorderLayout()); jPanelLeft.add(getJScrollPane(),BorderLayout.CENTER); } return jPanelLeft; } private JScrollPane getJScrollPane(){ if(jScrollPane == null){ jScrollPane = new JScrollPane(); jScrollPane.setViewportView(getJTree()); } return jScrollPane; } private JTree getJTree(){ if(jTree == null){ jTree = new JTree(); DefaultMutableTreeNode root = new DefaultMutableTreeNode("root"); for(int i=0;i<10;i++){ DefaultMutableTreeNode second = new DefaultMutableTreeNode(Integer.toString(i)); root.add(second); for(int j=5*i+10;j<5*i+15;j++){ DefaultMutableTreeNode third = new DefaultMutableTreeNode(Integer.toString(j)); second.add(third); } } DefaultTreeModel model = new DefaultTreeModel(root); jTree.setModel(model); } return jTree; } private JPanel getJPanelRight(){ if(jPanelRight == null){ jPanelRight = new JPanel(); jPanelRight.add(getJTextField()); jPanelRight.add(getJButton()); } return jPanelRight; } private JTextField getJTextField(){ if(jTextField == null){ jTextField = new JTextField(); jTextField.setText("asdfdsfs"); } return jTextField; } private JButton getJButton(){ if(jButton == null){ jButton = new JButton("查找"); jButton.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ findTree("55",2); } }); } return jButton; } //这里需要你添加--〉查找节点的方法 private void findTree(String str,int layer){ } public static void main(String[] args){ MainFrm application = new MainFrm(); application.show(); }} 问一下:findTree("55",2); --------> 只在第二层找吗?如果只在某一层找,也许可以不用递归,说不准 是的,是只在第二层查找,你说的递归是在全书查找,在某层如何做到呢?归根我现在有两个1、如何找jtree的某层,又没有现成的方法;2、.equal为相等,模糊等于又没有方法;感谢 trumplet(检查) 对本贴的关注!以下为递归全树查找方法,网上找的,应该没有问题:private TreePath findInPath(TreePath treePath, String str){ Object object = treePath.getLastPathComponent(); if (object == null) { return null; } String value = object.toString(); if (str.equals(value)) { 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(path, str); if (path != null) { return path; } } return null; } } 关于第一点,提点思路:先在全树上找,再用按 TreeNode.getLevel()+1 筛选所感兴趣的层。模糊查找我也不会,如果节点上不是String,而是某种类,似乎会更难办一些。 就是想你说的用TreeNode.getLevel,来判断一下就好了!至于模糊就是用判断该字符串是否为子字串 模糊查找要看你是要实现何种级别的模糊,如果是最简单的子串判断,String类就可以了,如果复杂点,要支持*等特殊符号,就要用到正则表达式了 chaosking(穷人脸) 我还没有搞到那么麻烦,不过确实是应该多看看了,赞,有空多向大家学习 JAVA IO流的疑惑求解~ 向JFrame添加背景图片,不知道那错了,在线等? 如何在打开一个窗口后,其他的窗口都不能进行操作,除非关闭打开的窗口? struts 跳转问题 学JSP J2EE对数据结构 算法要求高吗 关于线程通信 简单问题! 为何总是在执行是提示:Exception in thread "main" java.lang.NoClassDefFoundError: Fruit 准备学习java,请各位推荐几本好书 java 泛型和反射,求神指导~ 请教高手编译问题 关于多线程中死锁的问题
请补全方法findTree(String str,int layer);
package pkg;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;import javax.swing.tree.*;
public class MainFrm extends JFrame {
private JPanel jContentPanel = null;
private JSplitPane jSplitPane = null;
private JPanel jPanelLeft = null;
private JScrollPane jScrollPane = null;
private JPanel jPanelRight = null;
private JTextField jTextField = null;
private JTree jTree = null;
private JButton jButton = null;
public MainFrm(){
super();
init();
}
private void init(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setExtendedState(MAXIMIZED_BOTH);
this.setContentPane(getJContentPanel());
this.setTitle("查找树中节点的例子");
}
private JPanel getJContentPanel(){
if(jContentPanel == null){
jContentPanel = new JPanel();
jContentPanel.setLayout(new BorderLayout());
jContentPanel.add(getJSplitPane(),BorderLayout.CENTER);
}
return jContentPanel;
}
private JSplitPane getJSplitPane(){
if(jSplitPane == null){
jSplitPane = new JSplitPane();
jSplitPane.setDividerLocation(200);
jSplitPane.add(getJPanelLeft(),JSplitPane.LEFT);
jSplitPane.add(getJPanelRight(),JSplitPane.RIGHT);
}
return jSplitPane;
}
private JPanel getJPanelLeft(){
if(jPanelLeft == null){
jPanelLeft = new JPanel();
jPanelLeft.setLayout(new BorderLayout());
jPanelLeft.add(getJScrollPane(),BorderLayout.CENTER);
}
return jPanelLeft;
}
private JScrollPane getJScrollPane(){
if(jScrollPane == null){
jScrollPane = new JScrollPane();
jScrollPane.setViewportView(getJTree());
}
return jScrollPane;
}
private JTree getJTree(){
if(jTree == null){
jTree = new JTree();
DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
for(int i=0;i<10;i++){
DefaultMutableTreeNode second = new DefaultMutableTreeNode(Integer.toString(i));
root.add(second);
for(int j=5*i+10;j<5*i+15;j++){
DefaultMutableTreeNode third = new DefaultMutableTreeNode(Integer.toString(j));
second.add(third);
}
}
DefaultTreeModel model = new DefaultTreeModel(root);
jTree.setModel(model);
}
return jTree;
}
private JPanel getJPanelRight(){
if(jPanelRight == null){
jPanelRight = new JPanel();
jPanelRight.add(getJTextField());
jPanelRight.add(getJButton());
}
return jPanelRight;
}
private JTextField getJTextField(){
if(jTextField == null){
jTextField = new JTextField();
jTextField.setText("asdfdsfs");
}
return jTextField;
}
private JButton getJButton(){
if(jButton == null){
jButton = new JButton("查找");
jButton.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
findTree("55",2);
}
});
}
return jButton;
}
//这里需要你添加--〉查找节点的方法
private void findTree(String str,int layer){
}
public static void main(String[] args){
MainFrm application = new MainFrm();
application.show();
}
}
归根我现在有两个1、如何找jtree的某层,又没有现成的方法;2、.equal为相等,模糊等于又没有方法;
感谢 trumplet(检查) 对本贴的关注!
以下为递归全树查找方法,网上找的,应该没有问题:
private TreePath findInPath(TreePath treePath, String str){
Object object = treePath.getLastPathComponent();
if (object == null)
{
return null;
}
String value = object.toString();
if (str.equals(value))
{
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(path, str);
if (path != null)
{
return path;
}
}
return null;
}
}
至于模糊就是用判断该字符串是否为子字串