1
我有一個簡單的View
,代表POJO的TreeViewer
。 我需要從視圖中拖動TreeItem
並將它們拖放到GEF編輯器(在多頁面編輯器中)。從視圖拖放到GEF編輯器
當我從查看器中拖動項目到編輯器區域時,在偵聽器中調用創建請求,處理拖動和更新請求方法。 但是當我放棄該項目handleDrop
/drop
不被調用。
我View
包含:
Transfer[] types = new Transfer[]{TextTransfer.getInstance()};
treeViewer.addDragSupport(DND.DROP_MOVE, types, new InstructionDragListener(treeViewer));
的DragListener
樣子:
public class InstructionDragListener implements DragSourceListener {
private Viewer viewer;
public InstructionDragListener(Viewer viewer) {
this.viewer = viewer;
}
@Override
public void dragStart(DragSourceEvent event) {
System.out.println("start");
event.doit = true;
}
@Override
public void dragSetData(DragSourceEvent event) {
IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
Instruction ins=null;
if (selection.getFirstElement() instanceof Instruction)
ins = (Instruction) selection.getFirstElement();
event.data= ins.getID();
System.out.println("data");
}
@Override
public void dragFinished(DragSourceEvent event) {
System.out.println("end");
}
}
的編輯器是一個MultiPageEditor
的一部分,看起來像:
public class MyGraphicalEditor extends GraphicalEditorWithFlyoutPalette {
public static String ID = "MyEditorID";
public MyGraphicalEditor() {
setEditDomain(new DefaultEditDomain(this));
}
@Override
protected void initializeGraphicalViewer() {
super.initializeGraphicalViewer();
getGraphicalViewer().setContents(ProjectManager.getInstance().getTestCaseTest());
}
@Override
protected void configureGraphicalViewer() {
super.configureGraphicalViewer();
getGraphicalViewer().setEditPartFactory(new TestCaseEditPartFactory());
getGraphicalViewer().addDropTargetListener(new MyTransferTargetDropListener(getGraphicalViewer()));
}
}
和DropListener
樣子:
public class MyTransferTargetDropLsitener extends AbstractTransferDropTargetListener {
private MyTransferTagetDropFactory factory = new MyTransferTagetDropFactory();
public MyTransferTargetDropLsitener(EditPartViewer viewer, Transfer xfer) {
super(viewer, xfer);
}
@Override
protected Request createTargetRequest() {
System.out.println("CREATE REQUEST");
CreateRequest request = new CreateRequest();
request.setFactory(factory);
return request;
}
protected void handleDragOver() {
System.out.println("HANDLE DRAG");
super.handleDragOver();
}
@Override
protected void updateTargetRequest() {
System.out.println("UPDATE REQUEST");
System.out.println(getDropLocation().toString());
((CreateRequest)getTargetRequest()).setLocation(getDropLocation());
}
@Override
protected void handleDrop() {
System.out.println("DROP HANDLED");
super.handleDrop();
}
@Override
public void drop(DropTargetEvent event) {
System.out.println("DROPPED");
super.drop(event);
}
}
我錯過了什麼?
歡迎來到SO!我編輯了你的問題,以便它有更好的機會得到答案。請查看編輯,並參考幫助中的[ask]和[MCVE](http://stackoverflow.com/help/mcve)以獲取更多解釋和提示,以便更好地提出您的問題。如果有些事情不清楚,請隨時回覆此評論。在你的評論中加入'@ Palec'來通知我,否則我不會知道你回覆了。祝你今天愉快。 – Palec