Hola,
Me autorespondo. Lo que hay que hacer es añadirle, al componente que queremos que tenga la capacidad de manejar "cosas" que se arrastren sobre él, un objeto TransferHandler. Este objeto TransferHandler debe tener sobre-escritos los archivos conImport() y importData() (este último es donde haremos la verdadera gestión).
Os dejo el ejemplo que he hecho:
Código:
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.TransferHandler;
public class PruebaDropExterno extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel panel=new JPanel();
private TransferHandler manejador;
public PruebaDropExterno(){
super("PruebaDropExterno");
add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 600);
setLocationRelativeTo(null);
setVisible(true);
crearManejador();
panel.setTransferHandler(manejador);
}
private void crearManejador(){
manejador=new TransferHandler(){
@Override
public boolean canImport(TransferSupport support) {
System.out.println("PruebaDropExterno:crearManejador:canImport()");
if (!support.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
return false;
}
boolean copySupported = (COPY & support.getSourceDropActions()) == COPY;
if (!copySupported) {
return false;
}
support.setDropAction(COPY);
return true;
}
public boolean importData(TransferSupport support) {
System.out.println("PruebaDropExterno:crearManejador:importData()");
if (!canImport(support)) {
return false;
}
Transferable t = support.getTransferable();
try {
Object a=t.getTransferData(DataFlavor.stringFlavor);
System.out.println(a);
} catch (UnsupportedFlavorException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
};
};
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new PruebaDropExterno();
}
}
Para probarlo, pinchar y arrastrar sobre la ventana un documento de texto que tengáis en un directorio.
Un ejemplo más completo en
http://download.oracle.com/javase/tu...ferHandlerDemo
Más ejemplos de pinchar y arrastran en
http://www.java2s.com/Tutorial/Java/...tforImages.htm
Un saludo.