需要帮助实现从Java应用程序拖放到本机文件系统
我有一个JavaSwing应用程序,它显示已上载到服务器的文件/文件夹列表。我需要使用拖放将所选文件/文件夹下载到本机文件系统。我搜索了一些链接,但几乎每个链接都描述了JavaSwing应用程序中的拖放操作。我的要求是将文件从JavaSwing应用程序中拖到本机文件系统中 我需要帮助以了解如何获取用户将所选文件/文件夹拖放到本机文件系统的位置需要帮助实现从Java应用程序拖放到本机文件系统,java,swing,drag-and-drop,Java,Swing,Drag And Drop,我有一个JavaSwing应用程序,它显示已上载到服务器的文件/文件夹列表。我需要使用拖放将所选文件/文件夹下载到本机文件系统。我搜索了一些链接,但几乎每个链接都描述了JavaSwing应用程序中的拖放操作。我的要求是将文件从JavaSwing应用程序中拖到本机文件系统中 我需要帮助以了解如何获取用户将所选文件/文件夹拖放到本机文件系统的位置 例如,假设用户通过还原Java应用程序的窗口将文件拖放到C:\Back\u文件夹。如何识别用户将文件放置到的位置,即C:\Back\u Up?我相信可以实
例如,假设用户通过还原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应用程序,我想你就不知道它掉在哪里了。我把一个不可理解的部分斜体化了,请修复。请检查你的代码块并突出显示,这有点难读:)这是你问题的答案吗?我想是否要删除此答案并编辑您的问题?