Solved

counting the nodes in JTree

Posted on 1999-01-06
17
450 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
Comment Utility
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
Comment Utility
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_
Comment Utility
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
 

Author Comment

by:plaskowj
Comment Utility
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
Comment Utility
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_
Comment Utility
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_
Comment Utility
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
Comment Utility
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
Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
LVL 16

Expert Comment

by:heyhey_
Comment Utility
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
Comment Utility
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_
Comment Utility
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
Comment Utility
can you give me an example of cell rendering?
0
 
LVL 16

Expert Comment

by:heyhey_
Comment Utility
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
Comment Utility
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_
Comment Utility
probably you can put this code anywhere you want (it changes the default TreeLeaf image 'forever')
0
 

Author Comment

by:plaskowj
Comment Utility
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_
Comment Utility
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

What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
Java had always been an easily readable and understandable language.  Some relatively recent changes in the language seem to be changing this pretty fast, and anyone that had not seen any Java code for the last 5 years will possibly have issues unde…
Viewers learn about the third conditional statement “else if” and use it in an example program. Then additional information about conditional statements is provided, covering the topic thoroughly. Viewers learn about the third conditional statement …
The viewer will learn how to implement Singleton Design Pattern in Java.

728 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

Need Help in Real-Time?

Connect with top rated Experts

8 Experts available now in Live!

Get 1:1 Help Now