Javaでドラッグ&ドロップする際に、ドロップ位置を把握したいのですが……
TransferHandler
でドラッグ&ドロップを取得できるのはいいのですが、
どのオブジェクトにドロップされたかを取得する方法はありますか?
現在は次のような感じのコードなのですが、各JTextField
のどれにファイルがドロップされたかを判別したいのです。
(ファイル名自体は取得できるものの、どのオブジェクトにドロップされたか分からないとJTextField
に反映できないので)
class hoge{
JTextField[] file_text_field;
// コンストラクタ
hoge{
file_text_field = new JTextField[n];
for(int k = 0; k < n; k++){
file_text_field[k] = new JTextField();
file_text_field[k].setTransferHandler(new DropFileHandler());
}
}
// ドロップ用のクラス
class DropFileHandler extends TransferHandler{
@Override
public boolean canImport(TransferSupport support){
// ドロップされていない場合は受け取らない
if(!support.isDrop()) return false;
// ドロップされたものがファイルではない場合は受け取らない
if(!support.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) return false;
return true;
}
@Override
public boolean importData(TransferSupport support){
// 受け取っていいものか確認する
if(!canImport(support)) return false;
// ドロップ処理
Transferable transferable = support.getTransferable();
try{
// ファイルを受け取る
List<File> files = (List<File>)transferable.getTransferData(DataFlavor.javaFileListFlavor);
// リストに追加する
for(File file : files){
System.out.println(file.toString());
}
}catch(Exception error){
error.printStackTrace();
}
return true;
}
}
}