エクスプローラからドロップされたファイルを受け取るサンプルです。
GUIアプリを作っていると、エクスプローラからファイルをドロップしたいと思うことも多いと思うので、
ドロップされたファイルの名前を、標準出力に出力するだけのサンプルを作成しました。

こちらもあるのですが、よりシンプルにドロップされたファイルを受け取るだけのサンプルに修正しました。

ソース DropTest0.java

import java.awt.HeadlessException;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetAdapter;
import java.awt.dnd.DropTargetDropEvent;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.swing.JFrame;
 
public class DropTest0 extends JFrame {
 
	MyDropTargetListener dtl = new MyDropTargetListener();
 
	public DropTest0() throws HeadlessException {
		setTitle("Swingエクスプローラからファイルをドロップ");
 
		new DropTarget(this, DnDConstants.ACTION_COPY,
				new MyDropTargetListener());
 
		setBounds(200, 100, 300, 200);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}
 
	public static void main(String[] args) {
		new DropTest0();
	}
 
	class MyDropTargetListener extends DropTargetAdapter {
		@Override
		public void drop(DropTargetDropEvent dtde) {
			dtde.acceptDrop(DnDConstants.ACTION_COPY);
			boolean b = false;
			try {
				if (dtde.getTransferable().isDataFlavorSupported(
						DataFlavor.javaFileListFlavor)) {
					b = true;
					List<File> list = (List<File>) dtde.getTransferable()
							.getTransferData(DataFlavor.javaFileListFlavor);
					for (File file : list) {
						System.out.println(file.getPath());
					}
				}
			} catch (UnsupportedFlavorException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				dtde.dropComplete(b);
			}
		}
	}
}
 
最終更新:2012年10月06日 07:29