javaswingjtreedefaultmutabletreenode

JTree disable highlight effect on certain nodes


I have a Jtree and I need to remove the highlight effect on certain node.

So, now I have this for alla nodes

enter image description here

and I would like have this on certain node:

enter image description here

How can I achieve this ? Thanks


Solution

  • -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());