我有一个基于几个自定义类的 JTree。我想给几个节点一个特定的图标。因此我根据这个链接做了以下代码:Dynamically change icon of specific nodes in JTree
DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer() {
private static final long serialVersionUID = 1L;
private Icon good = new ImageIcon(getClass().getResource("/good.png"));
private Icon dunno = new ImageIcon(getClass().getResource("/dunno.png"));
private Icon bad = new ImageIcon(getClass().getResource("/bad.png"));
@Override
public Component getTreeCellRendererComponent(JTree tree,
Object value, boolean selected, boolean expanded,
boolean isLeaf, int row, boolean focused) {
Component c = super.getTreeCellRendererComponent(tree, value, selected, expanded, isLeaf, row, focused);
// JTreePanelNode node = (JTreePanelNode)c; - not possible
return c;
}
};
this.getTree().setCellRenderer(renderer);
我的每个节点都是 JTreePanelNode(自定义类)的一个对象,它保存了一个特定的状态,可以通过 setState(String s) 设置并通过 getState() 获取。所以我想要的是这样的:
if(node.getState().equals("good")) ..
else if(node.getState.equals("bad")) ..
else ..
我怎样才能实现这样的目标?据我了解,渲染器使用 getTreeCellRendererComponent 遍历每个节点并应用我可以使用 setIcon 和几个 ifs() 选择的特定图标。但是我不能转换为 JTreePanelNode。有什么解决办法吗?谢谢 :)