JTree的选择路径

时间:2009-04-17 15:57:03

标签: java swing xsd selection jtree

我使用XSOM API(https://xsom.dev.java.net)从XML Schema文件加载了包含节点的JTree。

每次选择文件时,我都会执行以下操作:

schemaParser = new XSDParser(selectedFile.getAbsolutePath());

TreeModel model = schemaParser.generateTreeModel();
schemaTree.setModel(model);
schemaTree.setCellRenderer(new SchemaTreeTraverser.SchemaTreeCellRenderer());

schemaTree是JTree的变量名。

XSDParser的代码如下:

package schemaparser;

import java.io.*;
import com.sun.xml.xsom.XSSchemaSet;
import com.sun.xml.xsom.impl.util.SchemaTreeTraverser;
import com.sun.xml.xsom.impl.util.SchemaWriter;
import com.sun.xml.xsom.parser.XSOMParser;

import javax.swing.tree.TreeModel;

public class XSDParser {

    private XSOMParser reader;
    private XSSchemaSet xss;

    public XSDParser(String parseFile){
        try {
            reader = new XSOMParser();
            reader.parse(new File(parseFile));

            xss = reader.getResult();
            if (xss == null) {
                System.out.println("error");
            }

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

   public TreeModel generateTreeModel() {
        SchemaTreeTraverser stt = new SchemaTreeTraverser();
        stt.visit(xss);
        TreeModel model = stt.getModel();

        System.out.println("Returning the tree model");
        return model;
    }
}

现在,只要在JTree中选择了一个节点,我就会执行以下操作:

private void schemaTreeValueChanged(javax.swing.event.TreeSelectionEvent evt)      {                                        

        TreePath path = schemaTree.getSelectionPath();

        if(path != null)
            System.out.println(path.toString());

}

但是现在无论我在树中选择哪个节点,我得到的结果如下:[null,null,null,null](取决于我去的层次结构的距离)

对于一个简单的JTree,这通常会打印出节点的路径,例如:[JTree,colors,red]

任何人都知道如何解决这个问题?

谢谢, 帕特里克

1 个答案:

答案 0 :(得分:1)

您不应该向JTree询问所选路径,您应该从TreeSelectionEvent获取它们。