ドロップされたファイル名を取得する方法(JDK1.4.1)
・ソース
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
/**
* ドロップされたファイル名を取得するサンプル
*/
public class DropTest{
public static void main(String[] args){
DropTestFrame frame = new DropTestFrame();
frame.show();
}
}
/**
* ドロップを受け付けるフレーム
*/
class DropTestFrame extends JFrame{
/**
* コンストラクタ
*/
public DropTestFrame(){
// フレーム
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
setTitle("DropTest");
setSize(300, 200);
// このフレームがドロップを受け付けるようにする
DropTarget dt = new DropTarget(this, new DropTargetAdapter(){
public void drop(DropTargetDropEvent dtde){
dropIn(dtde);
}
});
}
/**
* ドロップされたときの処理
* @param dtde DropTargetDropEvent
*/
private void dropIn(DropTargetDropEvent dtde){
// ドロップアクションを取得してCOPYとMOVEの場合はドロップを受け入れる
int action = dtde.getDropAction();
switch(action){
case DnDConstants.ACTION_COPY:
dtde.acceptDrop(DnDConstants.ACTION_COPY);
break;
case DnDConstants.ACTION_MOVE:
dtde.acceptDrop(DnDConstants.ACTION_MOVE);
break;
default:
dtde.dropComplete(false);
return;
}
// ドロップされたものの取り出し
try{
Transferable contents = dtde.getTransferable();
if(contents.isDataFlavorSupported(DataFlavor.javaFileListFlavor)){
List list = (List)contents.getTransferData(DataFlavor.javaFileListFlavor);
for(int i = 0 ; i < list.size() ; i++){
File file = (File)list.get(i);
System.out.println(file.getPath() + " がドロップされました。");
}
}else{
System.out.println("ファイルをドロップしてください。");
dtde.dropComplete(false);
return;
}
dtde.dropComplete(true);
}catch(Exception e){
e.printStackTrace();
}
}
}