This week's giveaway is in the Android forum.
We're giving away four copies of Android Security Essentials Live Lessons and have Godfrey Nolan on-line!
See this thread for details.
The moose likes Swing / AWT / SWT and the fly likes Improving performance of JTree ? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

Win a copy of Android Security Essentials Live Lessons this week in the Android forum!
JavaRanch » Java Forums » Java » Swing / AWT / SWT
Bookmark "Improving performance of JTree ?" Watch "Improving performance of JTree ?" New topic

Improving performance of JTree ?

Steven Rombauts

Joined: Apr 21, 2009
Posts: 5
Hello all,

I have written a TreeNode which holds all local & removable discs, and creates an entire tree of the directories (not the files!) underneath it (working on windows xp).
I get the desired results (eg. the right directories etc), but performance really seems to be an issue. It's not that it won't work well, but I do believe it should be faster for a nice user experience

I listed the code here, I am hoping some of you experienced Java coders could give me some pointers and tips to improve performance? When I click on a node, it takes a while before it opens up sometimes, especially if there are a lot of subdirectories. The JTree is put inside a JScrollPane, and scrolling doesn't go as fast as it should be sometimes. And could setOpaque( false ) also be a huge problem? It's ok that the first time a directory is opened, it takes a little while, but it should work faster as soon as the Children have been loaded into memory, no?

I am becoming a bit worried because the computers at school on which I have to showcase this application aren't even as fast as my own system here at home, whoops :-)

Thank you in advance for any pointers and tips :-)

Mathias Nilsson
Ranch Hand

Joined: Aug 21, 2004
Posts: 367
What about not adding childs to a node before expanding?

Let's say we have a root node that is c:\

you need to implement the hasChild, childCount. When clicking the root you load the next step into the tree. This can be done with all the nodes.
If you use as an object in DefaultMutableTree node you should get this to work.

Rob Spoor

Joined: Oct 27, 2005
Posts: 19656

You should also consider caching the results of File.list calls. I've created my own FileTreeModel (not TreeNode but similar), and ran into the same problem. The cause was the number of calls to File.list:
- in getChildCount()
- in getChildAt() for all children
- in isLeaf() for all children

As the number of visible nodes increases, the number of calls to File.list increases even harder. By caching the results and using that cached value, your tree will be a lot faster already. That does cause your tree to be out-dated at times, but by refreshing the cache (e.g. on each call to getChildCount()) you can solve that.

How To Ask Questions How To Answer Questions
Steven Rombauts

Joined: Apr 21, 2009
Posts: 5
Thank you both for the useful tips!

Caching the results of the file.list() method did improve the performance of my tree quite a bit! It runs great now :-)
Kriss Reddy
Ranch Hand

Joined: Mar 29, 2005
Posts: 54
[MG]Removed hijack

Kriss Reddy
Ranch Hand

Joined: Mar 29, 2005
Posts: 54
[MG]Removed hijack
Maneesh Godbole
Saloon Keeper

Joined: Jul 26, 2007
Posts: 10175

Please do not hijack other people's threads.
You can start a new thread to post your question

[How to ask questions] [Donate a pint, save a life!] [Onff-turn it on!]
Kriss Reddy
Ranch Hand

Joined: Mar 29, 2005
Posts: 54

Sorry for hijacking, My intention was to take advantage of the problem described here. I will not hijack again.

I agree. Here's the link:
subject: Improving performance of JTree ?
Similar Threads
XML to DOM to JTree
Subtree in JTree
JTree / DataModel Confusion
JTree TreeNode question