package jp.crwdev.app.util; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTargetAdapter; import java.awt.dnd.DropTargetDropEvent; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import jp.crwdev.app.constant.Constant; public class FileListDropTargetAdapter extends DropTargetAdapter { public interface OnDropFilesListener { void onDrop(List<String> filepath); } private OnDropFilesListener mListener = null; public FileListDropTargetAdapter(OnDropFilesListener listener){ mListener = listener; } @Override public void drop(DropTargetDropEvent e) { // ドロップ操作を受け入れる. e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); // ドロップに関係したTransferableを取得する. Transferable trans = e.getTransferable(); List<String> dropFiles = new ArrayList<String>(); try { // ドロップされたファイル一覧のリストを取得する. @SuppressWarnings("unchecked") List<File> list = (List<File>) trans.getTransferData(DataFlavor.javaFileListFlavor); // リストからファイルを一つ一つ取得する. for (File file : list) { // ファイルパスを取得する. //String fileName = file.getAbsolutePath(); File settingFile = Constant.getSettingFile(file); if(settingFile != null){ File contentFile = Constant.getContentFile(file); String filepath = contentFile.getAbsolutePath(); if(!dropFiles.contains(filepath)){ dropFiles.add(filepath); } } } // ドロップ処理が正常に完了したことを伝える. e.dropComplete(true); } catch (UnsupportedFlavorException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } if(dropFiles != null && dropFiles.size() > 0 && mListener != null){ mListener.onDrop(dropFiles); } } }