• 追加された行はこの色です。
  • 削除された行はこの色です。
#navi(../)
*FileをJavaアプリケーションからドロップ [#q12d43d9]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:&date~
更新日:&lastmod;
---
category: swing
folder: DragSource
title: FileをJavaアプリケーションからドロップ
tags: [DragAndDrop, File, DragGestureListener, TransferHandler]
author: aterai
pubdate: 2005-11-14T21:13:08+09:00
description: JavaアプリケーションからWindowsのデスクトップなどにFileをドロップします。
image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTL5-PTzWI/AAAAAAAAAYU/G2P--5GJWSU/s800/DragSource.png
---
* 概要 [#summary]
`Java`アプリケーションから`Windows`のデスクトップなどに`File`をドロップします。

#contents
**概要 [#mc57bbf2]
JavaアプリケーションからWindowsのデスクトップなどにFileをドロップします。
#download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTL5-PTzWI/AAAAAAAAAYU/G2P--5GJWSU/s800/DragSource.png)

http://terai.xrea.jp/swing/dragsource/screenshot.png
* サンプルコード [#sourcecode]
#code(link){{
label.setTransferHandler(new TransferHandler() {
  @Override public int getSourceActions(JComponent c) {
    return TransferHandler.COPY_OR_MOVE;
  }

**サンプルコード [#nad9512e]
  @Override protected Transferable createTransferable(JComponent c) {
    File tmpfile = getFile();
    if (tmpfile == null) {
      return null;
    } else {
      return new TempFileTransferable(tmpfile);
    }
  }

//-[[サンプルを起動>http://terai.xrea.jp/swing/dragsource/sample.jnlp]]
-[[jarファイル>http://terai.xrea.jp/swing/dragsource/sample.jar]]
-[[ソース>http://terai.xrea.jp/swing/dragsource/src.zip]]
  @Override protected void exportDone(JComponent c, Transferable d, int a) {
    cleanup(c, a == MOVE);
  }

**解説 [#z58c49a2]
  private void cleanup(JComponent c, boolean removeFile) {
    if (removeFile) {
      clearFile();
      c.repaint();
    }
  }
});
label.addMouseListener(new MouseAdapter() {
  @Override public void mousePressed(MouseEvent e) {
    System.out.println(e);
    JComponent c = (JComponent) e.getSource();
    c.getTransferHandler().exportAsDrag(c, e, TransferHandler.COPY);
  }
});
}}

//**参考リンク
**コメント [#zd263401]
* 解説 [#explanation]
上記のサンプルでは、ボタンで空の一時ファイルを生成し中央のラベルをマウスでドラッグすると生成したファイルをデスクトップなどに移動できます。

- `TransferHandler`が使用不可の`Java 1.5.0`などでは、以下のような`DragGestureListener`を使用する必要がある

#code{{
DragSource.getDefaultDragSource().createDefaultDragGestureRecognizer(
      label, DnDConstants.ACTION_MOVE, new DragGestureListener() {
  @Override public void dragGestureRecognized(DragGestureEvent e) {
    File tmpFile = getFile();
    if (Objects.isNull(tmpFile)) {
      return;
    }
    DragSourceAdapter dsa = new DragSourceAdapter() {
      @Override public void dragDropEnd(DragSourceDropEvent ev) {
        if (ev.getDropSuccess()) {
          clearFile();
        }
      }
    };
    e.startDrag(
      DragSource.DefaultMoveDrop,
      new TempFileTransferable(tmpFile),
      dsa);
  }
});
}}

* 参考リンク [#reference]
- [http://opus-i.biz/ opus-i | シンプル素材 テンプレート 音楽素材]

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