如何让树的节点代有多重属性? 可以利用DefaultMutableTreeNode的UserObject 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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();}} 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里有你要的或不要的所有信息。 派生个DefaultTreeModel,然后重载toString()方法,将返回值设置成你想要显示的任何组合都可以 通过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; }} 楼上的各位能否给出一个详细的例子代码??如果可能的话请发到[email protected]中万分感谢!! 记错了好象不用那么麻烦给你段代码吧,里面有你需要的东西/** * 递归调用填充树 */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()); 给我也寄一个:[email protected]谢谢了!! 简单的方法:派生DefaultTreeNode ,加入私有成员变量id,再写两个方法,public void setId(String id){ this.id = id;}public String getId(){ return id;}从数据库生成树时同时调用setId(),使用时调用getId(). 求高手编译!!!!!!!!!!!! 新手入门 如何用java代码实现类似于JBuilder中Make的功能?急用 关于异常! ==========关于java 打印=========== google编程大赛被淘汰了 Swing table中放Jcombobox getselected拿到的不是当前行 jTable 不能响应鼠标右键? 苦恼中。。。。。 有没有这样的涂鸦板的代码 Forte For Java 的问题?? 我的cute FTP列不全服务器上的目录,使用leapFTP吧,干脆一个也显示不出来,什么问题? public void paint(Graphics g)的问题??谢谢!!
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();
}
}
parentnode.setUserObject(datavo);//datavo是DataVO的一个实例,包含了一条记录的数据。
root.add(parentnode);这样在通过TreePath取到的TreeNode就可以
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) path.getLastPathComponent();
DataVO data = (DataVO)selectedNode.getUserObject();data里有你要的或不要的所有信息。
通过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;
}}
如果可能的话请发到[email protected]中万分感谢!!
好象不用那么麻烦
给你段代码吧,里面有你需要的东西
/**
* 递归调用填充树
*/
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());
谢谢了!!
this.id = id;
}public String getId(){
return id;
}
从数据库生成树时同时调用setId(),使用时调用getId().