Solved

counting the nodes in JTree

Posted on 1999-01-06
17
451 Views
Last Modified: 2008-03-17
I want to be able to count the nodes below a certain level in a JTree component,

how do i do this?
0
Comment
Question by:plaskowj
  • 9
  • 8
17 Comments
 
LVL 16

Accepted Solution

by:
heyhey_ earned 50 total points
ID: 1230524
i haven't tested the code, but you should see the idea

int countAllSubChilds(TreeNode node)
{
// if the node is leaf return 1
   if (node.getChildCount() == 0) return 1;

// if the node is not leaf - count all the childs
   int count = 0;
   for (int i = 0; i < node.getChildCount(); i++)
   {
       count += countAllSubChilds(node.getChildAt(i));
   }

   return (count + 1); // add 1 for this node (if you count all the nodes not only leaves)

//   return count; // use this if you want to count only tree leaves
}


hope this helps
  heyhey

P.S. What's going on with your "JTree simple question"
0
 

Author Comment

by:plaskowj
ID: 1230525
ok i have set up my JTree in a simple way:

DefaultMutableTreeNode top = new DefaultMutableTreeNode("Administration");
  DefaultMutableTreeNode D1 = new DefaultMutableTreeNode("Department1");
top.add(D1);
tree = new JTree(top);

so how do i fit the above into this, where do i declare something to be a node?

0
 
LVL 16

Expert Comment

by:heyhey_
ID: 1230526
top and D1 are DefaultMutableTreeNode which is a special kind of TreeNode

you can count all the nodes from the tree using
int allNodesCount = countAllSubChilds(top) ;

you can count all the nodes below D1 using
int sublNodesCount = countAllSubChilds(D1) ;

0
ScreenConnect 6.0 Free Trial

Want empowering updates? You're in the right place! Discover new features in ScreenConnect 6.0, based on partner feedback, to keep you business operating smoothly and optimally (the way it should be). Explore all of the extras and enhancements for yourself!

 

Author Comment

by:plaskowj
ID: 1230527
so finanly if i only wanted to count what is below D1 for example and not what is in D2 ( D2 being a sub node of D1) how whould i do this?
0
 

Author Comment

by:plaskowj
ID: 1230528
i figured out how to count below D1, but how do i count sub nodes, given that i only have the path or is there a way of retrieving node name?

many thanks
0
 
LVL 16

Expert Comment

by:heyhey_
ID: 1230529
this how you can get selected node (extracting it from the TreePath)

TreePath path = tree.getSelectionPath();
TreeNode node = (TreeNode)path.getLastPathComponent();

0
 
LVL 16

Expert Comment

by:heyhey_
ID: 1230530
I'm just curious ... What do you think is 'GRADE A' Answer ?

>> Name: plaskowj
>> First Login: 11/12/98
>> 
>> Last 10 Grades Given
>> B C B

0
 

Author Comment

by:plaskowj
ID: 1230531
to be honest i don't really look at the grades- the answer you gave me was great, next time i will rate it as excellent,

thanks anyway

Ps if you want to post a request for rating i will re-rate it with grade A
0
 
LVL 16

Expert Comment

by:heyhey_
ID: 1230532
no, no, no problems ;-)

as I said, I was just curious ....

What's going on with your "JTree simple question" ?

0
 

Author Comment

by:plaskowj
ID: 1230533
The problem i am having is that firstly I don't want "all" the leafs to be leafs, but instead empty folders- how do i do this?

and i also want to change the leaf icon to something else, how ?
0
 
LVL 16

Expert Comment

by:heyhey_
ID: 1230534
you can easy put your own Leaf icon using

UIManager.put("Tree.leafIcon", new ImageIcon("icon.gif"));

but if you want some leaves to have different icon than other leaves, you'll need to implement custom TreeCellRenderer (that is a component that knows how to render / paint JTree nodes)

0
 

Author Comment

by:plaskowj
ID: 1230535
can you give me an example of cell rendering?
0
 
LVL 16

Expert Comment

by:heyhey_
ID: 1230536
check this question
http://www.experts-exchange.com/topics/comp/lang/java/Q.10113010
there are some usefull comments there and I'll post some 'simple' code in a few days ...
0
 

Author Comment

by:plaskowj
ID: 1230537
cheers, but one last thing


where do i put this code?
UIManager.put("Tree.leafIcon", new ImageIcon("icon.gif"));


0
 
LVL 16

Expert Comment

by:heyhey_
ID: 1230538
probably you can put this code anywhere you want (it changes the default TreeLeaf image 'forever')
0
 

Author Comment

by:plaskowj
ID: 1230539
so why didn't it work- i set the icon.gif- to an icon which i placed in my project
0
 
LVL 16

Expert Comment

by:heyhey_
ID: 1230540
don't know ... it should work ...
I'll check this later and post a comment in the real question :)

(you can take a look at SampleTree example in your Swing directory - they use it too)


0

Featured Post

Optimizing Cloud Backup for Low Bandwidth

With cloud storage prices going down a growing number of SMBs start to use it for backup storage. Unfortunately, business data volume rarely fits the average Internet speed. This article provides an overview of main Internet speed challenges and reveals backup best practices.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
session migration servlets 2 36
type mismatch (Object[] to double[] 4 24
servlet example 17 30
Detect Closed Loops (circles, figure-8s, etc) in PNG Images 6 33
By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question