1
내 응용 프로그램에서 시스템 폴더로 끌어서 놓기 때문에 항목을 놓을 때 끌어온 개체를 나타내는 새 파일로 표시됩니다.스윙 드래그 앤 드롭 파일을 전송할 수 있습니까?
어떤 DataFlavor를 사용해야합니까?
내 응용 프로그램에서 시스템 폴더로 끌어서 놓기 때문에 항목을 놓을 때 끌어온 개체를 나타내는 새 파일로 표시됩니다.스윙 드래그 앤 드롭 파일을 전송할 수 있습니까?
어떤 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);
}
}