與你的第一個問題相關,你應該實現一個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