File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Java in General and the fly likes Swing DnD within JTree using Objects? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Java in General
Bookmark "Swing DnD within JTree using Objects?" Watch "Swing DnD within JTree using Objects?" New topic

Swing DnD within JTree using Objects?

B Atkins

Joined: Jun 11, 2009
Posts: 11
I want to be able to drag leave nodes between non-leaf nodes within the same JTree. When I try to implement Swing DnD using a TransferHandler, the drag never seems to initiate (no indication of the drag appears on the cursor or in the JTree). When I implement it using the more laborious AWT methods, I can get it to work. Is there a way to force Swing to recognize a DnD gesture within a single component?

In a related question, I want to initiate the drag when the user has selected leaf nodes, and only from the same parent. If a user selects a combination of nodes that includes a non-leaf node, or nodes from different parents, I'd like to have no DnD initiated in the first place (e.g. no cursor change, no visual indication of the drag initiating, rather than just rejecting the drop everywhere).


Two wrongs don't make a right... but three lefts do.
B Atkins

Joined: Jun 11, 2009
Posts: 11
Ok, solved both problems. I was not specifying allowed actions by overriding getSourceActions(), and if you return null from createTransferable, the drag doesn't initiate.
Maneesh Godbole
Saloon Keeper

Joined: Jul 26, 2007
Posts: 10825

Well done, and welcome to the Ranch.
We have a GUI related forum here, which would be a more appropriate place for this thread. I will move it for you, so future users, with the same problem can benefit from your solution.

[How to ask questions] [Donate a pint, save a life!] [Onff-turn it on!]
I agree. Here's the link:
subject: Swing DnD within JTree using Objects?
It's not a secret anymore!