2011-02-02 33 views
1

我想从我的应用程序拖放到系统文件夹中,这样当我放下一个项目时,它就会显示为一个代表我拖动的对象的新文件。摆动拖放文件可转移吗?

应该使用什么DataFlavor?

回答

4

我想出了自己。您只需要使用DataFlavor.javaFileListFlavor并在某处创建一个临时文件,并且一切正常。以下是对我有用的东西:

import java.awt.datatransfer.DataFlavor; 
import java.awt.datatransfer.Transferable; 
import java.awt.datatransfer.UnsupportedFlavorException; 
import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Collection; 
import java.util.Collections; 
import java.util.List; 

public class FileTransferable implements Transferable 
{ 
    final private List<File> files; 
    final private DataFlavor[] flavors; 

    /** 
    * A drag-and-drop object for transfering a file. 
    * @param file file to transfer -- this file should already exist, 
    * otherwise it may not be accepted by drag targets. 
    */ 
    public FileTransferable(Collection<File> files) { 
     this.files = Collections.unmodifiableList(
       new ArrayList<File>(files)); 
     this.flavors = new DataFlavor[] 
       { DataFlavor.javaFileListFlavor }; 
    } 

    static FileTransferable createFileInTempDirectory(String filename) 
     throws IOException 
    { 
     File dir = new File(System.getProperty("java.io.tmpdir")); 
     File f = new File(dir, filename); 
     f.createNewFile(); 
     return new FileTransferable(Collections.singletonList(f)); 
    } 

    public List<File> getFiles() { return this.files; } 

    @Override public Object getTransferData(DataFlavor flavor) 
      throws UnsupportedFlavorException, IOException 
    { 
     if (isDataFlavorSupported(flavor)) 
      return this.files; 
     else 
      return null; 
    } 

    @Override public DataFlavor[] getTransferDataFlavors() { 
     return this.flavors; 
    } 

    @Override public boolean isDataFlavorSupported(DataFlavor flavor) { 
     return DataFlavor.javaFileListFlavor.equals(flavor); 
    } 
}