Animate JTree Drops #27
Chapter 3, Tables and Trees
If you wanted to hack further, you could make this and other small func-
tions like it each separate decorators. Then you could combine them at will,
depending on the needs of your application.
This table model decorator is now part of the main Lucene distribution. It’s
part of a new lucene-contrib project for Swing. In addition to this table
model decorator, there is also a list decorator. I imagine the search logic is
going to beef up, so definitely check out the Lucene site for more informa-
tion. You can get read-only web access to the Lucene repository at http://svn.
apache.org/repos/asf/lucene/java/trunk/contrib/swing/. Also note that because
these models are officially part of lucene-contrib, they are going to be distrib-
uted with all new Lucene builds. So, they are going to come free with
Lucene in the future.
H A C K
Animate JTree Drops Hack #27
Who said working with tree paths was hard? Now you can reorganize tree
hierarchies with drag-and-drop.
JTrees are great for representing hierarchy, but they’re not so hot as control
widgets. You might want to drag items inside a tree, or accept a drop from
some other part of your application, and it turns out not to be well suited to
that. The problem is that the
JTree isn’t really a container, so from the
Swing programmer’s point of view, you see the tree’s visual representation,
but not the nodes within it.
The goal of this hack is to take a
JTree, like the one shown in Figure 3-11,
and allow you to reorganize it through drag-and-drop. The bulk of the work
will be in animating and handling the drop. The payoff is that making a sin-
gle tree reorderable will also get you most of the way to making it a good
drag-and-drop participant with the rest of your application, since support-
ing drag-and-drop within the
JTree requires you to make the tree a drag
source and a drop target.
If any of the forgoing sounds familiar, it should. Bringing drag-and-drop to
JTree is very similar to supporting it for the JList. In fact, the JTree and
JList have a lot in common—both use cell renderers, both are typically