拖放到其他应用程序和操作系统?

Tim*_*mst 4 drag-and-drop javafx-2

我在我的应用程序中使用 JavaFX 的拖放系统,到目前为止它运行良好。

现在我想支持拖放到外部应用程序,例如。将文件从我的应用程序拖到资源管理器中。我将如何实现这一目标?

Bru*_*ira 5

我已经通过使用实现了你所描述的:

Vector<File> files = new Vector<File>();
private ClipboardContent filesToCopyClipboard = new ClipboardContent();

...

final ObjectWithAReturnablePathField draggableObj = new ObjectWithAReturnablePathField();

...

draggableObj.setOnDragDetected(new EventHandler<MouseEvent>()
{

    @Override
    public void handle(MouseEvent me) 
    {
        Dragboard db = draggableObj.startDragAndDrop(TransferMode.ANY);
        try 
        {
           File f = new File(new URI(draggableObj.getFilePath()));
           files.add(f);
           filesToCopyClipboard.putFiles(files);
        } 
        catch (URISyntaxException e) 
        {
           e.printStackTrace();
        }
        db.setContent(filesToCopyClipboard);
        me.consume();
    }

 });
 draggableObj.setOnDragDone(new EventHandler<DragEvent>() 
 {
     @Override 
     public void handle(DragEvent me) 
     {

        me.consume();
      }
 });
Run Code Online (Sandbox Code Playgroud)

意思是:

通过在任何可返回文件路径的可拖动对象(任何节点)的 setOnDragDetected 方法上使用 TransferMode.ANY 使用列表填充 ClipboardContent,可以实现 JavaFX 2 和本机应用程序之间的文件传输。就我而言,我创建了一个名为 Thumb 的类来扩展 ImageView,并且(除其他外)我创建了一个名为 getFilePath() 的方法,该方法从用于初始化 ImageView() 的图像返回路径。顺便说一句,对于这个糟糕的例子和糟糕的英语,我很抱歉,但我现在没有时间给出更详细的答案。我希望它有帮助。干杯