1

代码是:

    DropTarget target = new DropTarget(sqlViewer.getTextWidget(), 
    DND.DROP_DEFAULT | DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK);
    Transfer[] types = new Transfer[] {TreeLeafListTransfer.getInstance(), 
    TextTransfer.getInstance(), FileTransfer.getInstance()};
    target.setTransfer(types);
    target.addDropListener(new DropTreeLeafAdapter(sqlViewer));

它在视图中正常工作,但在编辑器中失败。有什么不同?
upd:最奇怪的是——如果我用 try/catch 块包围它,它仍然毫无例外地失败。
编辑:问题不仅仅是 DnD 不起作用。由于这个块,整个编辑器无法实例化。只出现一个空窗口。

4

1 回答 1

0

它在视图中正常工作,但在编辑器中失败。有什么不同?

区别应该在于transfert 类型

回顾一下,传输类型允许拖动源指定它们允许从其小部件中拖出的对象类型,并且它们允许放置目标指定它们愿意接收的对象类型。
对于每种传输类型,都有一个org.eclipse.swt.dnd.Transfer. 这些子类实现了在对象和字节之间转换的编组行为,允许在应用程序之间进行拖放传输。

可能是您使用的传输类型列表与目标(编辑器)不太兼容?有关此问题的更多测试,请参见此线程

另一个要考虑的项目是 a 的正确设置TransferDropTargetListener(就像在这个线程中一样)。

因为我还没有完全测试过 eclipse DnD,所以我不能给你更多关于这个话题的细节,但希望这会给你一些东西来开始你自己的分析。

于 2009-06-17T20:50:07.630 回答