• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:FileをJavaアプリケーションからドロップ
#navi(../)
RIGHT:Posted by [[aterai]] at 2005-11-14
*FileをJavaアプリケーションからドロップ [#q12d43d9]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2005-11-14~
更新日:&lastmod;

#contents

**概要 [#mc57bbf2]
JavaアプリケーションからWindowsのデスクトップなどにFileをドロップします。

#screenshot
//-&jnlp;
-&jar;
-&zip;

//#screenshot
#ref(http://lh3.ggpht.com/_9Z4BYR88imo/TQTL5-PTzWI/AAAAAAAAAYU/G2P--5GJWSU/s800/DragSource.png)

**サンプルコード [#nad9512e]
#code{{
 class MyDragGestureListener implements DragGestureListener {
   public void dragGestureRecognized(DragGestureEvent dge) {
     final File tmpfile = getFile();
     if(tmpfile==null) {
       return;
     }
     Transferable tran = new Transferable() {
       public Object getTransferData(DataFlavor flavor) {
         ArrayList al = new ArrayList(1);
         al.add(tmpfile);
         return al;
       }
       public DataFlavor[] getTransferDataFlavors() {
         return new DataFlavor[] { DataFlavor.javaFileListFlavor };
       }
       public boolean isDataFlavorSupported(DataFlavor flavor) {
         return flavor.equals(DataFlavor.javaFileListFlavor);
       }
     };
     DragSourceAdapter dsa = new DragSourceAdapter() {
       public void dragDropEnd(DragSourceDropEvent dsde) {
         if(dsde.getDropSuccess()) {
           clearFile();
         }
       }
     };
     dge.startDrag(DragSource.DefaultMoveDrop, tran, dsa);
   }
 }
class MyDragGestureListener implements DragGestureListener {
  public void dragGestureRecognized(DragGestureEvent dge) {
    final File tmpfile = getFile();
    if(tmpfile==null) {
      return;
    }
    Transferable tran = new Transferable() {
      public Object getTransferData(DataFlavor flavor) {
        ArrayList al = new ArrayList(1);
        al.add(tmpfile);
        return al;
      }
      public DataFlavor[] getTransferDataFlavors() {
        return new DataFlavor[] { DataFlavor.javaFileListFlavor };
      }
      public boolean isDataFlavorSupported(DataFlavor flavor) {
        return flavor.equals(DataFlavor.javaFileListFlavor);
      }
    };
    DragSourceAdapter dsa = new DragSourceAdapter() {
      public void dragDropEnd(DragSourceDropEvent dsde) {
        if(dsde.getDropSuccess()) {
          clearFile();
        }
      }
    };
    dge.startDrag(DragSource.DefaultMoveDrop, tran, dsa);
  }
}
}}
//-&jnlp;
-&jar;
-&zip;

**解説 [#z58c49a2]
上記のサンプルでは、ボタンで空の一時ファイルを生成し、ラベルをマウスでドラッグすると生成したファイルをデスクトップなどに移動することが出来ます。

以下のようにDragGestureListenerを登録してラベルをドラッグ&ドロップすることで、JFileChooserなどで書き出すフォルダなどを指定する手間が省いています。
#code{{
 DragSource dragSource = DragSource.getDefaultDragSource();
 dragSource.createDefaultDragGestureRecognizer(label,
        DnDConstants.ACTION_MOVE, new MyDragGestureListener());
DragSource dragSource = DragSource.getDefaultDragSource();
dragSource.createDefaultDragGestureRecognizer(label,
       DnDConstants.ACTION_MOVE, new MyDragGestureListener());
}}

**参考リンク [#rde48634]
-[[ : : : o p u s - i : : : アイコンフリー素材>http://opus-i.biz/]]
-[http://opus-i.biz/ opus-i | シンプル素材 テンプレート 音楽素材]

**コメント [#zd263401]
#comment