Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/01/2011, 03:28
Avatar de elangelcaido
elangelcaido
 
Fecha de Ingreso: septiembre-2003
Ubicación: Oviedo
Mensajes: 1.068
Antigüedad: 21 años, 3 meses
Puntos: 4
Respuesta: Drop sobre componente

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.
__________________
Ta Luego! Al final sólo puede quedar uno...
________
lukos.org