public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected,
boolean expanded, boolean leaf,
int row, boolean hasFocus){ super.getTreeCellRendererComponent(tree, value, selected, expanded,leaf,row,hasFocus);
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
String nodename=(String)node.getUserObject(); if(selected&&hasFocus){
if(node.isLeaf()){
if(nodename.startsWith(" ")) node.setUserObject(nodename.substring(1));
else node.setUserObject(" "+nodename);
}
System.out.println(nodename);
}
if(nodename.startsWith(" ")) setIcon(createImageIcon("选中.PNG"));
else setIcon(createImageIcon("未选中.PNG")); return this;
}
(为简化)上面只考虑了叶节点 1.我是以 节点名称是否 startwith(" ") 来做标记,显示选中与否 放入不同icon,各位有好一点的办法吗? 2.我点击某一节点A,(本应该此节点选中),但是没反应,我再点击节点B,节点A 才被选中;再点击C,B才被选中即我选中A,没有立即调用 上面的渲染器 方法,为什么 ,树上还要再加监听???
boolean selected,
boolean expanded, boolean leaf,
int row, boolean hasFocus){ super.getTreeCellRendererComponent(tree, value, selected, expanded,leaf,row,hasFocus);
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
String nodename=(String)node.getUserObject(); if(selected&&hasFocus){
if(node.isLeaf()){
if(nodename.startsWith(" ")) node.setUserObject(nodename.substring(1));
else node.setUserObject(" "+nodename);
}
System.out.println(nodename);
}
if(nodename.startsWith(" ")) setIcon(createImageIcon("选中.PNG"));
else setIcon(createImageIcon("未选中.PNG")); return this;
}
(为简化)上面只考虑了叶节点 1.我是以 节点名称是否 startwith(" ") 来做标记,显示选中与否 放入不同icon,各位有好一点的办法吗? 2.我点击某一节点A,(本应该此节点选中),但是没反应,我再点击节点B,节点A 才被选中;再点击C,B才被选中即我选中A,没有立即调用 上面的渲染器 方法,为什么 ,树上还要再加监听???
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货