2008年10月18日土曜日

Javaでファイルのドラッグアンドドロップを受け付ける

備忘録。

Javaでファイルのドラッグアンドドロップを受け付けるプログラムです。

珍しくサンプルプログラムまで作りました。
eclipseで作ってましたが、下を適当な名前.javaとかにしてコンパイルすれば動くと思います。
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.awt.event.*;
import java.io.File;

/**
* DandDクラス
* ドラッグアンドドロップテストプログラム
* @author Sakito Yumitsuka
*/
public class DandD extends Frame
{
TextField tf1 = new TextField("ここにドラッグアンドドロップ",30);

/**
* ドラッグアンドドロップウィンドウの設定
*/
public DandD()
{
// ウィンドウ上の設定
this.setTitle("Drag and drop");
this.setSize(350, 90);

// ウィンドウ終了時の動作を指定
this.addWindowListener( new WindowAdapter(){
public void windowClosing(WindowEvent evt) {
System.exit(0);
}});

// 無名クラスでドロップ時の動作を指定
new DropTarget(tf1, new DropTargetAdapter(){
public void drop( DropTargetDropEvent e ) {
try {
Transferable transfer = e.getTransferable();
if ( transfer.isDataFlavorSupported( DataFlavor.javaFileListFlavor ) ) {
e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
java.util.List fileList = (java.util.List)( transfer.getTransferData( DataFlavor.javaFileListFlavor ) );
tf1.setText( ( (File)fileList.get(0) ).getAbsolutePath() );
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
});

setLayout( new FlowLayout() );
add(tf1);

setVisible( true );
}

/**
* @param args
*/
public static void main(String[] args)
{
new DandD();
}
}

こんな感じで。