JTree - custom icons

Is it possible to use custom icons for those small icons next to each node within a JTree?

I don't mean, a custom open and close folder image... I mean, each node within the entire JTree could potentially be different...

Here's my tree cell renderer (thanks CEHJ):

    private class NameOnlyRenderer extends DefaultTreeCellRenderer
    {
        public Component getTreeCellRendererComponent( JTree tree, Object value, boolean selected,
                                                                         boolean expanded, boolean leaf, int row, boolean hasFocus )
        {
            File f = (File ) value ;
            String text = f.getName() ;
            return super.getTreeCellRendererComponent( tree, text, selected, expanded, leaf, row, hasFocus ) ;
        }
    }


And I have a method which will return an Icon based on the file type:

    public Icon getIcon( File f )
    {
        return (new JFileChooser()).getIcon( f ) ;
    }

......

Can this be achieved?

Thanks loads
LVL 25
InteractiveMindAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

borislavmarkovCommented:
The default renderer is in fact a label, so you can use it's icon like this:
 
private class NameOnlyRenderer extends DefaultTreeCellRenderer
    {
        public Component getTreeCellRendererComponent( JTree tree, Object value, boolean selected,
                                                                        boolean expanded, boolean leaf, int row, boolean hasFocus )
        {
            File f = (File ) value ;
            String text = f.getName() ;
            JLabel lbl = (JLabel)super.getTreeCellRendererComponent( tree, text, selected, expanded, leaf, row, hasFocus ) ;
            //****************
            lbl.setIcon(getIcon(f));
            //***************
            return lbl;
        }
    }
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Siva Prasanna KumarPrincipal Solutions ArchitectCommented:
0
Mayank SAssociate Director - Product EngineeringCommented:
You can try:

ImageIcon leafIcon = new ImageIcon ( getClass ().getResource ( "/image1.gif" ) ) ; // assuming that is the icon
ImageIcon closedIcon = new ImageIcon ( getClass ().getResource ( "/image2.gif" ) ) ;
ImageIcon openIcon = new ImageIcon ( getClass ().getResource ( "/image3.gif" ) ) ;
UIManager.put ( "Tree.leafIcon", leafIcon ) ;
UIManager.put ( "Tree.openIcon", openIcon ) ;
UIManager.put ( "Tree.closedIcon", closedIcon ) ;


>> http://www.objects.com.au/java/examples/swing/IconTreeCell.do

Says bad gateway?
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.