Swing/DragSource の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/DragSource へ行く。
- Swing/DragSource の差分を削除
--- 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 [#summary] `Java`アプリケーションから`Windows`のデスクトップなどに`File`をドロップします。 #download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTL5-PTzWI/AAAAAAAAAYU/G2P--5GJWSU/s800/DragSource.png) * Source Code Examples [#sourcecode] #code(link){{ label.setTransferHandler(new TransferHandler() { @Override public int getSourceActions(JComponent c) { return TransferHandler.COPY_OR_MOVE; } @Override protected Transferable createTransferable(JComponent c) { File tmpfile = getFile(); if (tmpfile == null) { return null; } else { return new TempFileTransferable(tmpfile); } } @Override protected void exportDone(JComponent c, Transferable d, int a) { cleanup(c, a == MOVE); } 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); } }); }} * Explanation [#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 [#reference] - [http://opus-i.biz/ opus-i | シンプル素材 テンプレート 音楽素材] * コメント [#comment] * Comment [#comment] #comment #comment