JFrameでエクスプローラなどからファイルをドロップされたときに、容易にドロップされたファイルを処理することができるようにした抽象クラスです。サブクラスでfileDropを定義することで、ドロップされたファイルを処理することができます。
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
/**
* ファイルのドロップを可能としたフレームです。
* サブクラスでfilDropメソッドを定義してください。
*/
public abstract class DnDFrame extends JFrame implements DropTargetListener {
/**
* コンストラクタです。
*/
public DnDFrame() {
new DropTarget(this, DnDConstants.ACTION_COPY_OR_MOVE, this, true);
}
/**
* ファイルがドロップされた際に呼び出されます。
* ListからFileでキャストして取り出してください。
* @param files ファイルのリスト
*/
public abstract void fileDrop(List files);
/**
* DropTargetListenerの実装です。
* @param DropTargetDragEvent
*/
public void dragEnter(DropTargetDragEvent dtde) {
if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
dtde.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
}
}
/**
* DropTargetListenerの実装です。
* @param DropTargetEvent
*/
public void dragExit(DropTargetEvent dte) {
}
/**
* DropTargetListenerの実装です。
* @param DropTargetDragEvent
*/
public void dragOver(DropTargetDragEvent dtde) {
}
/**
* DropTargetListenerの実装です。
* @param DropTargetDropEvent
*/
public void drop(DropTargetDropEvent dtde) {
try {
if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
fileDrop((List)dtde.getTransferable().getTransferData(DataFlavor.javaFileListFlavor));
dtde.dropComplete(true);
}
} catch (Exception e) {
e.printStackTrace();
dtde.dropComplete(false);
}
}
/**
* DropTargetListenerの実装です。
* @param DropTargetDragEvent
*/
public void dropActionChanged(DropTargetDragEvent dtde) {
}
}
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
/**
* ファイルのドロップを可能としたフレームです。
* サブクラスでfilDropメソッドを定義してください。
*/
public abstract class DnDFrame extends JFrame implements DropTargetListener {
/**
* コンストラクタです。
*/
public DnDFrame() {
new DropTarget(this, DnDConstants.ACTION_COPY_OR_MOVE, this, true);
}
/**
* ファイルがドロップされた際に呼び出されます。
* ListからFileでキャストして取り出してください。
* @param files ファイルのリスト
*/
public abstract void fileDrop(List files);
/**
* DropTargetListenerの実装です。
* @param DropTargetDragEvent
*/
public void dragEnter(DropTargetDragEvent dtde) {
if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
dtde.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
}
}
/**
* DropTargetListenerの実装です。
* @param DropTargetEvent
*/
public void dragExit(DropTargetEvent dte) {
}
/**
* DropTargetListenerの実装です。
* @param DropTargetDragEvent
*/
public void dragOver(DropTargetDragEvent dtde) {
}
/**
* DropTargetListenerの実装です。
* @param DropTargetDropEvent
*/
public void drop(DropTargetDropEvent dtde) {
try {
if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
fileDrop((List)dtde.getTransferable().getTransferData(DataFlavor.javaFileListFlavor));
dtde.dropComplete(true);
}
} catch (Exception e) {
e.printStackTrace();
dtde.dropComplete(false);
}
}
/**
* DropTargetListenerの実装です。
* @param DropTargetDragEvent
*/
public void dropActionChanged(DropTargetDragEvent dtde) {
}
}