class MyClass
{
String strValue;
void setValue(String str)
{
strValue = str;
} String toString()
{
return strValue;
}
}
树图上的节点挂接的就是MyClassDefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) tree.getSelectionPath(). getLastPathComponent();
MyClass myClass = (MyClass)treeNode.getUserObject();
myClass.setValue("aaaaaaaaaaaaaaaaaa");这个时候就改变了它在树图上的显示的文字就发生了改变。
就出现了上面的现象!!!
{
String strValue;
void setValue(String str)
{
strValue = str;
} String toString()
{
return strValue;
}
}
树图上的节点挂接的就是MyClassDefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) tree.getSelectionPath(). getLastPathComponent();
MyClass myClass = (MyClass)treeNode.getUserObject();
myClass.setValue("aaaaaaaaaaaaaaaaaa");这个时候就改变了它在树图上的显示的文字就发生了改变。
就出现了上面的现象!!!
class MyClass{
private Object value;
void setValue(Object o){
this.value=o;
}
public Object getValue()
{
return value;
}
public String toString(Object o)
{
return o.toString();
}
}
缺省的TreeCellRenderer内部是一个JLabel,字符串长了就会出现...
需要将其实现为一个可以换行的Component,比如JTextField
你的MyClass实现一个getText()方法先。2.自己写一个CellRenderer
class MyTreeCellRenderer extends DefaultTreeCellRenderer{
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected,
boolean expanded,
boolean leaf, int row,
boolean hasFocus){
DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
//判断是否是MyClass类型的
if (node instanceof MyClass) {
setText(((MyClass)node).getText());
//当你的MyClass实现一个取图标的方法,这里也可以定制图标了。
//setIcon(...);
//...
}
else {
setText(node.getUserObject().toString());
}
if (selected) {
setForeground(Color.white);
}
else {
setForeground(Color.black);
}
this.selected = selected;
this.hasFocus = hasFocus;
return this;
} //覆盖paintComponent方法,想啥画就啥画...
public void paintComponent(Graphics g) {
//先根据selected状况画选中和非选中背景
//再getText()取得要画的字符串,getIcon取得图标,画之
//.........
} //覆盖下面的方法,设置长度,出不出现...就靠它了
public Dimension getPreferredSize() {
//这里根据getText()的字符串宽度和icon的宽度计算吧
//.....
}
}3.在设置Tree的类里:
myTree.setCellRenderer(new MyTreeCellRenderer());差不多了就这样了.咱是同道啊,多多交流,呵呵。
这才是用于树中节点的编辑.关注
((DefaultTreeModel)tree.getModel()).nodeChanged(newNode);