可以利用DefaultMutableTreeNode的UserObject

解决方案 »

  1.   

    public class DataVO {
    private String cname;
    private Object id;
    private Object otherfield;
    /**
     * DataVO 构造子注解。
     */
    public DataVO() {
    super();
    }
    /**
     * 此处插入方法说明。
     * 创建日期:(2003-1-20 14:28:28)
     * @return java.lang.String
     */
    public java.lang.String getCname() {
    return cname;
    }
    /**
     * 此处插入方法说明。
     * 创建日期:(2003-1-20 14:28:28)
     * @return java.lang.Object
     */
    public java.lang.Object getId() {
    return id;
    }
    /**
     * 此处插入方法说明。
     * 创建日期:(2003-1-20 14:28:28)
     * @return java.lang.Object
     */
    public java.lang.Object getOtherfield() {
    return otherfield;
    }
    /**
     * 此处插入方法说明。
     * 创建日期:(2003-1-20 14:28:28)
     * @param newCname java.lang.String
     */
    public void setCname(java.lang.String newCname) {
    cname = newCname;
    }
    /**
     * 此处插入方法说明。
     * 创建日期:(2003-1-20 14:28:28)
     * @param newId java.lang.Object
     */
    public void setId(java.lang.Object newId) {
    id = newId;
    }
    /**
     * 此处插入方法说明。
     * 创建日期:(2003-1-20 14:28:28)
     * @param newOtherfield java.lang.Object
     */
    public void setOtherfield(java.lang.Object newOtherfield) {
    otherfield = newOtherfield;
    }
    /**
     * 此处插入方法说明。
     * 创建日期:(2003-1-20 14:28:57)
     * @return java.lang.String
     */
    public String toString() {
    return getCname();
    }
    }
      

  2.   

    DefaultMutableTreeNode parentnode = new DefaultMutableTreeNode();
    parentnode.setUserObject(datavo);//datavo是DataVO的一个实例,包含了一条记录的数据。
    root.add(parentnode);这样在通过TreePath取到的TreeNode就可以
    DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) path.getLastPathComponent();
    DataVO data = (DataVO)selectedNode.getUserObject();data里有你要的或不要的所有信息。
      

  3.   

    派生个DefaultTreeModel,然后重载toString()方法,将返回值设置成你想要显示的任何组合都可以
      

  4.   


    通过getItemId()方法就可以访问你当初生成叶子时赋予的Id值了。public class TrayTreeNode extends DefaultMutableTreeNode {
        private String itemId;    /**
         * 构造器
         * @param text
         * @param itemId
         */
        public TrayTreeNode(String text,String itemId) {
            super(text);
            this.itemId = itemId;
        }    public String getItemId() {
            return itemId;
        }}
      

  5.   

    楼上的各位能否给出一个详细的例子代码??
    如果可能的话请发到[email protected]中万分感谢!!
      

  6.   

    记错了
    好象不用那么麻烦
    给你段代码吧,里面有你需要的东西
    /**
     * 递归调用填充树
     */
    public void initNode(DefaultMutableTreeNode node)
    {
    index++;
    //如当前已无存货,返回
    if (index > vData.size() - 1)
    return;
    //如当前存货级次大于当前节点存货,
    if (((GoodsInfo) node.getUserObject()).getLevel() < getLevel(((Vector) vData.elementAt(index)).elementAt(0).toString().trim()))
    {
    //加入当前存货节点作为当前节点的子节点
    DefaultMutableTreeNode currNode = new DefaultMutableTreeNode(((Vector) vData.elementAt(index)).elementAt(0).toString().trim() + ":" + ((Vector) vData.elementAt(index)).elementAt(1).toString().trim());
    GoodsInfo stemp = new GoodsInfo((Vector) vData.elementAt(index));
    stemp.setLevel(getLevel(((Vector) vData.elementAt(index)).elementAt(0).toString().trim()));
    currNode.setUserObject(stemp);
    node.add(currNode);
    //子存货中最大的代码
    ((GoodsInfo)node.getUserObject()).setMaxChildCode(((Vector) vData.elementAt(index)).elementAt(0).toString().trim());
    //并以当前存货节点为根节点,递归调用
    initNode(currNode);
    }
    //如当前已无存货,返回
    if (index > vData.size() - 1)
    return; //如当前存货级次等于当前节点存货,
    if (((GoodsInfo) node.getUserObject()).getLevel() == getLevel(((Vector) vData.elementAt(index)).elementAt(0).toString().trim()))
    {
    //加入当前存货节点作为当前节点的兄节点
    DefaultMutableTreeNode currNode = new DefaultMutableTreeNode(((Vector) vData.elementAt(index)).elementAt(0).toString().trim() + ":" + ((Vector) vData.elementAt(index)).elementAt(1).toString().trim());
    GoodsInfo stemp = new GoodsInfo((Vector) vData.elementAt(index));
    stemp.setLevel(getLevel(((Vector) vData.elementAt(index)).elementAt(0).toString().trim()));
    currNode.setUserObject(stemp);
    ((DefaultMutableTreeNode) node.getParent()).add(currNode);
    //子存货中最大的代码
    ((GoodsInfo)((DefaultMutableTreeNode)node.getParent()).getUserObject()).setMaxChildCode(((Vector) vData.elementAt(index)).elementAt(0).toString().trim());
    //并以当前存货节点为根节点,递归调用
    initNode(currNode);
    }
    //如当前存货级次小于当前节点存货,返回
    else
    {
    return;
    }
    }其中,下边这句是解决你的问题的。
    //加入当前存货节点作为当前节点的子节点
    DefaultMutableTreeNode currNode = new DefaultMutableTreeNode(((Vector) vData.elementAt(index)).elementAt(0).toString().trim() + ":" + ((Vector) vData.elementAt(index)).elementAt(1).toString().trim());
      

  7.   

    给我也寄一个:[email protected]
    谢谢了!!
      

  8.   

    简单的方法:派生DefaultTreeNode ,加入私有成员变量id,再写两个方法,public void setId(String id){
      this.id = id;
    }public String getId(){
      return id;
    }
    从数据库生成树时同时调用setId(),使用时调用getId().