Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要帮助实现从Java应用程序拖放到本机文件系统_Java_Swing_Drag And Drop - Fatal编程技术网

需要帮助实现从Java应用程序拖放到本机文件系统

需要帮助实现从Java应用程序拖放到本机文件系统,java,swing,drag-and-drop,Java,Swing,Drag And Drop,我有一个JavaSwing应用程序,它显示已上载到服务器的文件/文件夹列表。我需要使用拖放将所选文件/文件夹下载到本机文件系统。我搜索了一些链接,但几乎每个链接都描述了JavaSwing应用程序中的拖放操作。我的要求是将文件从JavaSwing应用程序中拖到本机文件系统中 我需要帮助以了解如何获取用户将所选文件/文件夹拖放到本机文件系统的位置 例如,假设用户通过还原Java应用程序的窗口将文件拖放到C:\Back\u文件夹。如何识别用户将文件放置到的位置,即C:\Back\u Up?我相信可以实

我有一个JavaSwing应用程序,它显示已上载到服务器的文件/文件夹列表。我需要使用拖放将所选文件/文件夹下载到本机文件系统。我搜索了一些链接,但几乎每个链接都描述了JavaSwing应用程序中的拖放操作。我的要求是将文件从JavaSwing应用程序中拖到本机文件系统中

我需要帮助以了解如何获取用户将所选文件/文件夹拖放到本机文件系统的位置


例如,假设用户通过还原Java应用程序的窗口将文件拖放到
C:\Back\u
文件夹。如何识别用户将文件放置到的位置,即
C:\Back\u Up

我相信可以实现这一点。不确定细节,但…

好吧,不可能获得拖放对象的位置信息。猜猜看,你的想法是知道放置点,然后在第二步中将文件复制到该位置

但我认为,它不能以这种方式工作,更糟糕的是,整个想法可能相当依赖于操作系统。我敢打赌,你必须把整个文件都传送出去。我知道使用SWT是可能的,但是SWT附带了一些本地库

这里至少有一个链接显示了另一个例子:

谢谢Andreas。。 我们有一个JAVA组件作为一个表,我们从中拖动文件并将其放到本机文件系统中。我们有这样的代码

A> 组件是JXTree。我们设置了以下属性以支持拖放

Component.setDropMode(DropMode.INSERT); 

Component.setDragEnabled(true); 

DragSource ds = DragSource.getDefaultDragSource();

DragGestureRecognizer dgr = ds.createDefaultDragGestureRecognizer( Component,    
                 DnDConstants.ACTION_MOVE, new FileDragGestureListener());
B> 我们已经编写了一个实现拖动手势侦听器的类

公共类FileDragestureListener扩展DragSourceAdapter实现DragestureListener{

公共无效DragestureRecognited(DragestureEvent dge){

类TextFileTransferable实现Transferable{

File temp;




public TextFileTransferable(File temp) throws IOException {

    this.temp = temp;
}

public Object getTransferData(DataFlavor flavor) {
     List list = new ArrayList();
    list.add(temp);
    return list;
}

public DataFlavor[] getTransferDataFlavors() {

    DataFlavor[] df = new DataFlavor[1];
    df[0] = DataFlavor.javaFileListFlavor;
    return df;
}

public boolean isDataFlavorSupported(DataFlavor flavor) {


    if (flavor == DataFlavor.javaFileListFlavor) {
        return true;
    }
    return false;
}
}

因此,这就是为什么我们可以将文件下载到%TEMP%,然后我们不能将该文件移动到已删除的位置

请指出我的错误所在,或者说明实现此拖放的最佳方法

Component.setDropMode(DropMode.INSERT); 

Component.setDragEnabled(true); 

DragSource ds = DragSource.getDefaultDragSource();

DragGestureRecognizer dgr = ds.createDefaultDragGestureRecognizer( Component,    
                 DnDConstants.ACTION_MOVE, new FileDragGestureListener());

谢谢

如果您大体上知道人们将进入哪些目录,那么您的应用程序可以创建指向这些目录的文件对象,然后使用Observer设计模式告知您的应用程序什么时候有东西进入了这些目录(可能通过轮询内容)虽然如果其他程序/人员将内容删除到这些目录中,您也会收到通知,但是您可以比较通知到达的时间和您知道您进行了删除的时间。这会将其降低到可以说是很低的概率(但仍然可能会令人不安)其他人几乎在您进入目录B的同时进入目录A的情况


祝你好运!

可以从JDesktop集成组件中获得一些线索:

一旦它离开java应用程序,我想你就不知道它掉在哪里了。我把一个不可理解的部分斜体化了,请修复。请检查你的代码块并突出显示,这有点难读:)这是你问题的答案吗?我想是否要删除此答案并编辑您的问题?