【发布时间】:2013-01-07 08:42:32
【问题描述】:
我有一个 JTree,它的节点是从 DefaultMutableTreeNode 驱动的。每个节点都可以验证或不验证。起初所有节点的图标都是相同的,但是,当我选择它们并按下验证按钮时,我将更改验证节点的ICON。我希望能够在每个节点上单击和写入,因此我不能使用 JLabel 显示图标。 我编写了以下代码,但它返回 NULLException。
class CustomIconRenderer extends DefaultTreeCellRenderer {
ImageIcon defaultIcon;
ImageIcon specialIcon;
ImageIcon closeIcon;
static DefaultTreeModel model;
static myDefaultMutableTreeNode root;
public CustomIconRenderer()
{
openIcon = new ImageIcon(CustomIconRenderer.class.getResource("icons/question.png"));
closeIcon = new ImageIcon(CustomIconRenderer.class.getResource("icons/Target-New-Logo.jpg"));
setLeafIcon(closeIcon);
}
@Override
public Component getTreeCellRendererComponent(JTree tree,Object value,boolean sel,boolean expanded,boolean leaf,int row,boolean hasFocus)
{
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
Object nodeObj = ((DefaultMutableTreeNode)value).getUserObject();
Check_each_nodes_are_verified_change_the_icon();
return this;
}
}
public class myDefaultMutableTreeNode extends DefaultMutableTreeNode{
private static int id=0;
private int nodeid;
private int verify;
private int depth;
}
百万感谢。
【问题讨论】:
-
你在哪里得到 NullPointerException?你能发布堆栈跟踪吗?
-
“我希望能够在每个节点上点击和书写,所以我不能使用 JLabel 来显示图标” - 当然可以,渲染器和编辑器是两个独立的实体。事实上
DefaultTreeCellRenderer扩展自JLabel -
如需尽快获得更好的帮助,请发帖SSCCE。
-
请学习java命名约定并遵守它们。
标签: java swing icons jtree treecellrenderer