Swing 拖放文件可传输吗?

标签 swing file drag-and-drop

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

我应该使用什么 DataFlavor?

最佳答案

我自己想出来了。您只需要使用 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);
    }
}

关于 Swing 拖放文件可传输吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4879956/

相关文章:

Java 组件隐藏在 JPanel 中

java - 扩展的 JPanel 破坏了 GridLayout

Python按给定顺序将多个文件 append 到一个大文件

jQuery UI 拖放交换元素

html - IE11 的控制台报告我有多个 body 标签

java - 将 JPanel 的枢轴点设置为其中心

java - JTextField 数组的 ActionListener

c - 从 C 中的路径名中提取基本路径

python - 为什么检查然后立即打开文件有风险?

angularjs - angular-drag-and-drop-lists 简单的演示不起作用