Drag and drop of a group of files into a JTree in Java
Description
The following code shows how to drag and drop of a group of files into a JTree.
Example
import java.awt.BorderLayout;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.io.File;
import java.util.Iterator;
import java.util.List;
/*from w w w . ja v a 2s . co m*/
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.TransferHandler;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
public class Main {
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
DefaultMutableTreeNode mercury = new DefaultMutableTreeNode("Mercury");
root.add(mercury);
DefaultMutableTreeNode venus = new DefaultMutableTreeNode("b");
root.add(venus);
DefaultMutableTreeNode mars = new DefaultMutableTreeNode("java2s.com");
root.add(mars);
MyTree tree = new MyTree(root);
JScrollPane scrollPane = new JScrollPane(tree);
frame.add(scrollPane, BorderLayout.CENTER);
frame.setSize(300, 150);
frame.setVisible(true);
}
}
class MyTree extends JTree {
public MyTree(DefaultMutableTreeNode root) {
super(root);
setDragEnabled(false);
setTransferHandler(new FSTransfer());
}
}
class FSTransfer extends TransferHandler {
public boolean importData(JComponent comp, Transferable t) {
if (!(comp instanceof MyTree)) {
return false;
}
if (!t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
return false;
}
MyTree tree = (MyTree) comp;
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
try {
List data = (List) t.getTransferData(DataFlavor.javaFileListFlavor);
Iterator i = data.iterator();
while (i.hasNext()) {
File f = (File) i.next();
root.add(new DefaultMutableTreeNode(f.getName()));
}
model.reload();
return true;
} catch (Exception ioe) {
System.out.println(ioe);
}
return false;
}
public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
if (comp instanceof MyTree) {
for (int i = 0; i < transferFlavors.length; i++) {
if (!transferFlavors[i].equals(DataFlavor.javaFileListFlavor)) {
return false;
}
}
return true;
}
return false;
}
}
The code above generates the following result.
Home »
Java Tutorial »
Swing »
Java Tutorial »
Swing »