Thanks, rmp and Pat. Your suggestions are going to be
a great help.
--Erik O.
--- "Prescott, Ralph" <[EMAIL PROTECTED]>
wrote:
> >To improve the user experience, I'd like
> >to immediately load enough data for the
> >user to visually chew on for a while,
> >then lazy load the rest of it (the lion's share).
>
> >The javadoc for JTree.DynamicUtilTreeNode
> >looks promising, but neither google nor this mail
> >archive show many references to it.
>
> >Is there a standard way to do this?
>
> You can use that node class or your own.
> A couple of key points you want to understand are:
>
> * I'm assuming that you're using DefaultTreeModel
> and DefaultMutableTreeNode
> for your data -- either directly or via
> subclassing.
> If not, you will have to solve similar problems in
> your classes
>
> * you want to call
> DefaultTreeModel.setAsksAllowsChildren(true)
> This changes the protocol of isLeaf in the model.
> This is a
> subtle but key aspect of DefaultTreeModel and it's
> interaction with JTree
>
> * In your node class you have to two things:
>
> o lazily defer actual population until
> getChildCount() is called.
> If you've correctly set askAllowsChildren this
> won't be called until
> the user actually expands a node.
> private boolean _loaded = false;
> public int getChildCount() {
> if (!_loaded)
> {
> _loaded = true; // have to do this
> FIRST
> // as add() calls
> back into this method
>
> loadData(); // your method to load
> content
> }
> return super.getChildCount();
> }
> Note: by rights you also need to do the same for
> children() but
> it's rarely a problem.
>
> o ensure that allowsChildren correctly states if
> you're a leaf or not
> BEFORE you have loaded your data.
> You can do this by setting the property or
> overriding -- whatever works
> for you. If you're not sure if its a leaf then
> return true. If you've
> set askAllowsChildren on the model you will now
> get expansion handles
> before your data is loaded.
>
> * If you can bring "chunks" of data down fast enough
> to be interactive then
> this scheme works well. If not you have to play
> some games (have the node
> say "loading..." until the data is there, etc)
>
> * Spawning an async worker thread to keep loading
> data works well too.
>
> * Just be careful about mutating your model outside
> the AWT thread as the
> Tree is a model listener. Gather the data and use
> invokeLater to do the
> final mutation.
>
> HTH
> ~rmp
>
__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com
_______________________________________________
Advanced-swing mailing list
[EMAIL PROTECTED]
http://eos.dk/mailman/listinfo/advanced-swing