I have a Jtree
and I need to remove the highlight effect on certain node.
So, now I have this for alla nodes
and I would like have this on certain node:
How can I achieve this ? Thanks
-First: you need to set an object (with your own property) to the node with the following method:
Group aGroup = new Group(); //Obviously use your correct constructor
DefaultMutableTreeNode node = new DefaultMutableTreeNode(yourObject);
Remember to implement toString
method in Group class
-Second: Create a new class that extends DefaultTreeCellRenderer
and override getTreeCellRendererComponent
like this:
public class MyRenderer extends DefaultTreeCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel, boolean exp, boolean leaf, int row, boolean hasFocus) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
if(node.getUserObject().getYourProperty()){
setTextNonSelectionColor(Color.BLACK);
setBackgroundSelectionColor(Color.BLUE);
setTextSelectionColor(Color.WHITE);
setBorderSelectionColor(Color.WHITE);
}
else{
setTextNonSelectionColor(Color.LIGHT_GRAY);
setBackgroundSelectionColor(Color.RED);
setTextSelectionColor(Color.WHITE);
setBorderSelectionColor(Color.WHITE);
}
super.getTreeCellRendererComponent(
tree, value, sel, exp, leaf, row, hasFocus);
return this;
}
}
-Third: set your renderer to tree:
yourTree.setCellRenderer(new MyRenderer());