【发布时间】:2011-05-29 07:09:19
【问题描述】:
我正在尝试将文件从 Finder 拖到我的 SWT 应用程序中。在 Windows 和 Ubuntu 上,以下代码有效:
public class DndTest {
public static void main(final String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display, SWT.DIALOG_TRIM);
shell.setText("Drag & drop test");
shell.setSize(200, 200);
final FormLayout layout = new FormLayout();
shell.setLayout(layout);
final Label lbl = new Label(shell, SWT.NORMAL);
lbl.setAlignment(SWT.CENTER);
lbl.setText("Drop files here");
final FormData layoutData = new FormData();
layoutData.left = new FormAttachment(50, -100);
layoutData.top = new FormAttachment(50, -15);
layoutData.right = new FormAttachment(50, 100);
layoutData.bottom = new FormAttachment(50, 15);
lbl.setLayoutData(layoutData);
final DropTarget dt = new DropTarget(shell,
DND.DROP_DEFAULT | DND.DROP_MOVE);
final FileTransfer fileTransfer = FileTransfer.getInstance();
dt.setTransfer(new Transfer[] { fileTransfer });
dt.addDropListener(new DropTargetAdapter() {
@Override
public void drop(final DropTargetEvent event) {
System.out.println(event);
String fileList[] = null;
final FileTransfer ft = FileTransfer.getInstance();
if (ft.isSupportedType(event.currentDataType)) {
fileList = (String[]) event.data;
}
for (final String file : fileList) {
System.out.println("- " + file);
}
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
我的印象是我的应用程序没有将自己注册为 Mac 上的放置目标,因为将文件悬停在它上面不会给我放置光标。
我正在使用最新的 SWT 3.5(我不能使用 3.6,因为为了兼容性,我需要坚持使用 Carbon & Java 1.5)。
知道这里有什么问题吗?
编辑:我修改了代码,使其成为一个完全封闭的示例。它在 Windows 和 Ubuntu 上将删除的文件名打印到控制台,但在 Mac 上不执行任何操作。
【问题讨论】:
-
您能否提供一个完全独立的示例?提前致谢。
-
@mklhmnn 我已经编辑了代码。您需要做的就是指定
import org.eclipse.swt.*。另请注意,我使用的是 SWT 3.5。 -
我使用的是 SWT 3.7M4 并且打印了删除的文件名。未显示特殊的放置光标,但我不确定它在 OSX 上的外观。我建议使用最新的 SWT 版本来修复/解决您的兼容性问题。
-
感谢测试!我猜想它会在更高版本的 SWT 中得到修复,但由于不兼容的数量众多,现在升级对我来说确实不是一个选择。我希望可能有 JNI/JNA 解决方案。
-
这显然是 SWT 库中的一个限制。我知道有时他们需要时间来实现与 finder 的交互。如果是我,我将尝试查看该功能是否在最新的 SWT 中有效,然后从最新的 SWT 中重构出必要的代码并用作自定义库。我知道它的工作量很大,但我认为没有其他选择。(当然更新除外)
标签: java drag-and-drop swt