Re: building DefaultTreeM
To: comp.lang.java.gui
Jeff Higgins wrote:
Hi,
I hope someone can explain to me how to build
my DefaultTreeModel from a List of delimited Strings.
Solution follows:
I get from my news server a list
(some tens of thousands) of newsgroups in the form:
Takes about five minutes to fill my JTree this way
with about 58000 groups :P
I guess a lazy load will be necessary.
package newsgroup;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
@SuppressWarnings("serial")
public class GroupTreeDemo extends JFrame
{
DefaultTreeModel model;
public GroupTreeDemo()
{
super("GroupTreeModel Demo");
setSize(300, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Group f = new Group("MyNewsServer");
DefaultMutableTreeNode root =
new DefaultMutableTreeNode(f);
model = new DefaultTreeModel(root);
fillModel(root);
JTree tree = new JTree(model);
getContentPane().add(new JScrollPane(tree));
}
private static void fillGroup(
DefaultMutableTreeNode node,
List<Group> lst, int count)
{
if(count < lst.size())
{
Enumeration children = node.children();
String grpString = lst.get(count).getLabel();
boolean contains = false;
while(children.hasMoreElements())
{
DefaultMutableTreeNode tmpNode =
(DefaultMutableTreeNode)children.nextElement();
if(grpString.compareTo(
tmpNode.getUserObject().toString()) == 0)
{
contains = true;
node = tmpNode;
count++;
}
}
if(!contains)
{
while(count < lst.size())
{
DefaultMutableTreeNode newNode =
new DefaultMutableTreeNode(lst.get(count));
node.add(newNode);
node = newNode;
count++;
}
}
else
{
fillGroup(node, lst, count);
}
}
}
private static void fillModel(
DefaultMutableTreeNode current)
{
String[] myGroups =
{ "comp.lang.java.gui",
"comp.lang.java.help",
"comp.lang.java.programmer",
"news.software.nntp",
"news.software.readers",
"rec.models.railroad",
"rec.models.scale"
};
ArrayList<List<Group>> groups =
new ArrayList<List<Group>>(myGroups.length);
List<Group> list;
for (String str : myGroups)
{
list = new ArrayList<Group>();
String[] strArray = str.split("\\.");
for (String s : strArray)
{
list.add(new Group(s));
}
groups.add(list);
}
for (List<Group> lst : groups)
{
fillGroup(current, lst, 0);
}
}
public static class Group
{
String label;
public Group(String s)
{ label = s; }
public String getLabel()
{ return label; }
public String toString()
{ return label; }
}
public static void main(String args[])
{
GroupTreeDemo demo = new GroupTreeDemo();
demo.setVisible(true);
}
}
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24