En este ejemplo, muy pedido por cierto, vamos a ver como implementar una funcion que haga “drag and drop” de un grupo de archivo y los meta dentro de un tree

Como algo para destacar les comento que en este ejemplo usamos la función getdatatransfer que devuelve un objeto que represente el dato a ser  transferido

Pero bueno, basta de cháchara, aquí el ejemplo que todos quieren ver.

import javax.swing.tree.*;

import java.util.List;

import javax.swing.*;

import java.awt.dnd.*;

import java.awt.Insets;

import java.io.File;

import java.io.IOException;

import java.awt.datatransfer.*;

import java.util.Iterator;

import java.awt.Point;

import java.awt.Rectangle;

public class DDTree extends JTree {

public DDTree() { super(); init(); }

public DDTree(TreeModel newModel) { super(newModel); init(); }

public DDTree(TreeNode root) { super(root); init(); }

public DDTree(TreeNode root, boolean asks) { super(root, asks); init(); }

private void init() {

setDragEnabled(false);

setTransferHandler(new FSTransfer());

}

public class FSTransfer extends TransferHandler {

public boolean importarDatos(JComponent jcomp, JComponent  t) {

if (!(jcomp instanceof DDTree)) {

return false;

}

if (!t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {

return false;

}

DDTree tree = (DDTree)jcomp;

DefaultTreeModel dtmodel = (DefaultTreeModel)tree.getModel();

DefaultMutableTreeNode root = (DefaultMutableTreeNode)dtmodel.getRoot();

try {

List datos = (List)t.getTransferData(DataFlavor.javaFileListFlavor);

Iterator i = datos.iterator();

while (i.hasNext()) {

File archivo = (File)i.next();

root.add(new DefaultMutableTreeNode(archivo.getName()));

}

dtmodel.reload();

return true;

}

catch (UnsupportedFlavorException ufe) {

System.err.println(“Problemas”);

}

catch (IOException ioe) {

System.out.println(“Problemas durante la importacion” + ioe);

}

return false;

}

public boolean canImport(JComponent jcomp, DataFlavor[] tf) {

if (jcomp instanceof DDTree) {

for (int i = 0; i < tf.length; i++) {

if (![i].equals(DataFlavor.javaFileListFlavor)) {

return false;

}

}

return true;

}

return false;

}

}

}