与你的第一个问题相关,你应该实现一个TreeCellRenderer。 猜你会做类似的东西:获取对象和呼叫的
//and override also all the other functions of TreeCellRenderer
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
Component returnValue = null;
if ((value != null) && (value instanceof DefaultMutableTreeNode)) {
Object userObject = ((DefaultMutableTreeNode) value)
.getUserObject();
if (userObject instanceof YourClass) {
YourClass yourElement = (YourClass) userObject;
if(col==0) titleLabel.setText(yourElement.getID());
if(col==1) titleLabel.setText(yourElement.getName());
if(col==2) titleLabel.setText(yourElement.getParentID());
if (selected) {
renderer.setBackground(backgroundSelectionColor);
} else {
renderer.setBackground(backgroundNonSelectionColor);
}
renderer.setEnabled(tree.isEnabled());
returnValue = renderer;
}
}
if (returnValue == null) {
returnValue = defaultRenderer.getTreeCellRendererComponent(tree,
value, selected, expanded, leaf, row, hasFocus);
}
return returnValue;
}
}
什么是目前发生在你的是,你的单元格渲染器的返回对象实例元素ID(DictionaryItem @ 11abb71为例),而不是getID()函数。
你可以找到TreeCellRenderer example.
关系到你的第二个问题的额外例子和信息,请参阅上TreeModel example的例子。也许你也可以尝试通过代码扩展行。 如果“+”图标更改为“ - ”,则可能意味着getChildCount运行良好,但它不工作的是getChild(int row),它将返回null或无效的树行元素。
'JTree'将使用该节点的'toString'方法来生成输出。您可以更改'toString'方法返回的内容或使用'TreeCellRenderer'(最好) – MadProgrammer
@MadProgrammer谢谢您的建议。它适用于我(JTree将使用节点的toString方法来生成输出)。第二种方法有点复杂:-) –
不要重新发明轮子,也不要打扰(不要轻易没有重写BasicsTreeXxx,无论是Renderer,都是模型,太难了XxxCellEditor没有优秀的知识)1.买Jide,2 。SwingX有非常好的解决方法 – mKorbel