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
보이는 : 편집기는 MultiPageEditor
의 일부이며처럼 보이는
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");
}
}
:
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