Swingからエクスプローラに複数のファイルをドラッグ&ドロップする.

@ITに出てたので、チョット作ってみました。移動とコピーができます。

import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.io.File;
import java.util.ArrayList;
import javax.swing.*;

/**
 * Swingからエクスプローラに複数のファイルをドラッグ&ドロップする.
 * ドラッグ先のみ対応
 */
public class FileDragTest implements Transferable, DragGestureListener {
    JFrame frame;
    FileDragTest() {
        frame = new JFrame();
        // ドラッグ元を作成する
        DragSource dragSource = new DragSource();
        DragGestureRecognizer dgr = dragSource.createDefaultDragGestureRecognizer(
                    frame,
                    DnDConstants.ACTION_COPY_OR_MOVE,
                    this);
        frame.setSize(640, 480);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
    /** 引数のデータ型にあったデータを返す. */
    public Object getTransferData(DataFlavor flavor) {
        // ここではデータ型のチェックしてない.
        ArrayList filelist = new ArrayList();
        filelist.add(new File("C:\\Test.txt")); // ここを変えてください
        return filelist;
    }
    /** 転送可能なデータ型を返す. */
    public DataFlavor getTransferDataFlavors() {
        // ここではファイルリストだけ
        return new DataFlavor {DataFlavor.javaFileListFlavor};
    }
    /** 引数のデータ型をサポートしているかどうか返す. */
    public boolean isDataFlavorSupported(DataFlavor flavor) {
        // ここではファイルリストだけ
        return flavor.equals(DataFlavor.javaFileListFlavor);
    }

   /** ドラッグの操作が行われた. */
   public void dragGestureRecognized(DragGestureEvent e) {
       System.out.println("From.dragGestureRecognized()\n "+e);
       // Copy/Moveのアクションならドラッグを開始する
       if((e.getDragAction()|DnDConstants.ACTION_COPY_OR_MOVE)!= 0) {
           e.startDrag(DragSource.DefaultCopyDrop, this, null);
       }
   }

    public static void main(String[] args) {
        new FileDragTest();
    }
}