用XML文件的方式,具体我没有做过,所以也没法说得很具体:)
就是类似于
<node>
  <name>node1</name>
  <child>node11</child>
  <child>node12</child>
</node>
<node>
...
</node>
...

解决方案 »

  1.   

    我用的是一个Hashtable,保存时将Hashtable系列化写到文件,不知还有没有其它方法,大家多多参与
      

  2.   

    to lotofu(骆驼):那你有什么好办法,说说看!!
      

  3.   

    你能帮我看看我的问题吗? (也是关于树的。我想你一定能解答 ) 
    http://expert.csdn.net/Expert/topic/1582/1582732.xml?temp=.2382929谢谢。
      

  4.   

    扩展jTree,为每个treenode增加一个状态变量,保存下来,
    展开的时候读取状态信息,来判断节点是否展开就可以了
      

  5.   

    其实状态我倒是不在乎,我想的是如何保存结构,保存在数据库中感觉不太好,不能拿到哪总是给别人配数据库,放到文件中又怕别人通过文件乱改,所以我用Hashtable来作为系列化保存,结果很好,但是有个问题,hashtable是自动排序的,他把我的树型结构顺序打乱了
      

  6.   


    "放到文件中又怕别人通过文件乱改"-“所以我用Hashtable来作为系列化保存”
    那你不还是保存在文件中了吗?不过不是文本文件罢了。参考一下下面的代码,不知对你有没有帮助————————————
    public class XMLTree extends JTree{ 
      private DefaultMutableTreeNode treeNode; //JTree的根节点
      private DocumentBuilderFactory dbf; 
      // 这三个成员变量是xml parser需要的
      private DocumentBuilder db; 
      private Document doc; 
      //
      XMLTree(String fileName){
        dbf = DocumentBuilderFactory.newInstance(); 
        //生成dbf的实例
        db = dbf.newDocumentBuilder(); 
        //生成db的实例
        treeNode = LoadFile( getXMLRoot( "text" ) ); 
        //解析该xml文件,返回JTree的根节点
        setModel( new DefaultTreeModel( treeNode ) ); 
        //根据该根节点生成JTree
      }
      public void SaveToFile(DefaultMutableTreeNode root, FileWriter fw)
      {
        try
        {
         if (root.isLeaf())
         fw.write(root.toString()+"\r\n");
    //如果是叶子节点则直接将该节点输出到文件中
       else
      {
        //不是叶子节点的话递归输出该节点
            fw.write("<"+root.toString()+">\r\n");
            for (int i=0; i < root.getChildCount(); i++)
            {
              DefaultMutableTreeNode childNode =(DefaultMutableTreeNode)root.getChildAt(i);
              saveFile(childNode, fw);
              //递归输出该节点的所有子节点
            }
            fw.write("</"+root.toString()+">\r\n");
          }
        }
        catch(Exception e)
        {
          e.printStackTrace();
         }
      }
    private Node getXMLRoot(String text)
    {
        ByteArrayInputStream byteStream;
        byteStream = new ByteArrayInputStream(text.getBytes()); 
        //将XML文件读到Stream里去
        try{
          doc = db.parse( byteStream ); 
          //解析该xml文件。
        } 
    catch( Exception e )
        { 
      e.printStackTrace();
    }
        return ( Node )doc.getDocumentElement();
        //返回该XML文件的DOM树的根元素
      } }
      

  7.   

    首先,谢谢你!我的目的不要xml,拿到碰到这种情况只能用xml吗?
      

  8.   

    amjn(神雕过儿) 
    你好 你能有空帮帮我吗?你能帮我看看我的问题吗? (也是关于树的。我想你一定能解答 ) 
    http://expert.csdn.net/Expert/topic/1582/1582732.xml?temp=.2382929谢谢。
      

  9.   

    用XML来保存JTree是最合适的一种方法.
    JTree是一个树型结构,而XML也是一种树型结构,两者有非常好的对应关系.
    尤其是当你用DOM来处理XML时,它首先生成的就是一棵XML树.
    对JTree的处理中最重要的是要使用递归算法,因为多数时候你不知道树有几层.
    1.存储.
    因为XML实际上是纯文本文件,只要准备好一个String,再将其写入就可以了。
    写入:
    PrintWriter out = new PrintWriter(new FileWriter(chooser.getSelectedFile()));
    out.print(mTree.toXmlFromTree());
    生成字符串:
    public String toXmlFromTree() {
            return toXmlFromNode(treeRoot);
        }
    下面是一个递规程序:
    public String toXmlFromNode(DefaultMutableTreeNode node)『
           StringBuffer sb = new StringBuffer();
    sb.append("Something for this node, <node1>.... ");
            for (int i = 0; i < node.getChildCount(); i++) {
                if ((node.getChildAt(i))).getUserObject() [is a leaf]) { //leaf, break the recursion
                    sb.append("something about this node");
                }
                if ((node.getChildAt(i))).getUserObject() [not a leaf]) {
                    sb.append(toXmlFromNode((DefaultMutableTreeNode) node.getChildAt(i))); //non-leaf, recursion
                }
            }
            sb.append("</node1>\n");
            return sb.toString();
    }
    2.从XML文件中读入,并恢复这棵树。
    (1)parse XML file
    public static Document ParseXmlByDomFromFile(File docFile) {
    Document doc = null;
    try {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    doc = db.parse(docFile);
    } catch (Exception e) {
    System.out.print("Problem parsing the file.");
    } Element root = doc.getDocumentElement(); return doc;
    }
    (2) convert the doc to your JTree
    public static void convertXmlToMyModel(Document doc, YourType root) {
    convertXmlToMyModelFromElementRoot(doc.getDocumentElement(), root);
    }
    下面是一个递规程序:
    private static void convertXmlToMyModelFromElementRoot(Element elementroot, FeatureGroup featureroot) {
    Node n = elementroot.getElementsByTagName("groupname").item(0).getFirstChild();
    //do something for current node
    for (int i = 0; i < ChildList.getLength(); i++) {
    if (ChildList.item(i).getNodeName() == "node") {  //for leaf in the XML tree
    //add it to the JTree
    }
    if (ChildList.item(i).getNodeName() == "group") {  //for non-leaf 
    convertXmlToMyModelFromElementRoot(((Element) (ChildList.item(i))), fg);//递规
    //add it to the JTree
    }
    }
    }你如果不熟悉XML,可以参考这里的教程:
    http://developerlife.com/