1。JAVA中树形控件中怎样更改各节点旁边显示的字符串啊?
比如现在我
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(obj);
model.insertNodeInto(newNode,root, root.getChildCount());
这个Object对象如果换做是另一个类的对象,而在树形控件上的字符串我希望显示该对象的name属性,怎么办???
2。如何使得加在ROOT下的所有第一层节点(暂无子节点)也具有文件夹的图标,即也变成具有字节点的节点的图标?3。DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
renderer.setLeafIcon(new ImageIcon(HpathStr+"attribute.gif"));
renderer.setClosedIcon(new ImageIcon(HpathStr+"entity.gif"));
renderer.setOpenIcon(new ImageIcon(HpathStr+"entity.gif"));
tree.setCellRenderer(renderer);这样设置节点的图标为何无效啊???????????????
比如现在我
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(obj);
model.insertNodeInto(newNode,root, root.getChildCount());
这个Object对象如果换做是另一个类的对象,而在树形控件上的字符串我希望显示该对象的name属性,怎么办???
2。如何使得加在ROOT下的所有第一层节点(暂无子节点)也具有文件夹的图标,即也变成具有字节点的节点的图标?3。DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
renderer.setLeafIcon(new ImageIcon(HpathStr+"attribute.gif"));
renderer.setClosedIcon(new ImageIcon(HpathStr+"entity.gif"));
renderer.setOpenIcon(new ImageIcon(HpathStr+"entity.gif"));
tree.setCellRenderer(renderer);这样设置节点的图标为何无效啊???????????????
public class TreeNode extends DefaultMutableTreeNode {
public TreeNode(NodeInfo ni){
super(ni.name);
}
}
然后直接用你自己定义的类:TreeNode tn = new TreeNode(theNode);
public class MyTreeCellRenderer extends DefaultTreeCellRenderer
{ public MyTreeCellRenderer()
{
} public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus)
{
super.getTreeCellRendererComponent(tree,value,selected,expanded,leaf,row,hasFocus); TreeNode node = (TreeNode)value;
switch(node)//判断node的类型
{
case 容器节点 : this.setIcon(容器节点图标);
break;
case 叶子节点 : this.setIcon(叶子节点图标);
break;
default :
break;
}
return this;
}}
public class MyTreeCellRenderer extends DefaultTreeCellRenderer
{ public MyTreeCellRenderer()
{
} public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus)
{
super.getTreeCellRendererComponent(tree,value,selected,expanded,leaf,row,hasFocus); TreeNode node = (TreeNode)value;
switch(node)//判断node的类型
{
case 容器节点 : this.setIcon(容器节点图标);
break;
case 叶子节点 : this.setIcon(叶子节点图标);
break;
default :
break;
}
return this;
}}
EntityTreeNode entityNode = (EntityTreeNode)findUserObject(entity);
AttributeTreeNode attributeNode = new AttributeTreeNode(attribute);
model.insertNodeInto(attributeNode,entityNode,entityNode.getChildCount());
然后在最后一句那java.lang.NullPointerException啊!!
{
private URL HcodeBase;
private String HpathStr;
public MyTreeCellRenderer(){}
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus)
{
super.getTreeCellRendererComponent(tree,value,selected,expanded,leaf,row,hasFocus); try
{
HcodeBase=new URL("file:"+System.getProperty("user.dir") +"/");
}
catch(Exception e){}
HpathStr=HcodeBase.toString();
HpathStr=HpathStr.substring(5,HpathStr.length());
TreeNode node = (TreeNode)value;
if (value.getClass().getSimpleName().equals("EntityTreeNode"))//判断node的类型
{
this.setIcon(new ImageIcon(HpathStr+"entity.gif"));
}
else
{
this.setIcon(new ImageIcon(HpathStr+"attribute.gif"));
}
return this;
}
}MyTreeCellRenderer myTreeCellRenderer = new MyTreeCellRenderer();
tree.setCellRenderer(myTreeCellRenderer);我这样图标还是不变啊!
然后
TreeNode node = (TreeNode)value;
if(node.id == 0)//id==0表示容器节点
{
this.setIcon(...);
}
else
{
this.setIcon(...);
}
怎么弄?
{
EntityTreeNode entityNode1 = (EntityTreeNode)findUserObject(entity);
AttributeTreeNode attributeNode = new AttributeTreeNode((ERAttribute)attribute);
if (entityNode1 == null)
System.out.println("vsad!");
model.insertNodeInto(attributeNode,entityNode1,entityNode1.getChildCount());
TreeNode[] nodes = model.getPathToRoot(entityNode1);
TreePath path = new TreePath(nodes);
tree.scrollPathToVisible(path);
}这儿输出vsad!
说明是findUserObject找不到parent节点啊!
2。另外你用判断节点属于哪个class的方法不可取
如果有多种节点类型岂不是会有多个类,不如写成这样:
public class MyTreeNode extends DefaultMutableTreeNode {
int type;
public TreeNode(NodeInfo ni){
super(Utility.toCN(ni.name));
this.type= ni.type;
}
}
然后在下面的类中直接判断Node的类型即可
public class MyTreeCellRenderer extends DefaultTreeCellRenderer
{ public MyTreeCellRenderer()
{
} public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus)
{
super.getTreeCellRendererComponent(tree,value,selected,expanded,leaf,row,hasFocus); MyTreeNode node = (MyTreeNode )value;
switch(node.type)
{
case Entity: this.setIcon(...);
break;
case Attribute: this.setIcon(...);
break;
default : break;
}
return this;
}}
JTree插入节点后也无法自动刷新已发到你邮箱!
Exception in thread "main" java.lang.ClassCastException:!!!!!