# Drag&Drop bei TreeViewer



## sutcha (12. Dez 2007)

Ich benutze den JFace TreeViewer und möchte die Items in dem Baum via Drag&Drop verschieben. Hat jemand damit Erfahrung? Ich habe nur sehr wenig Erfahrung mit Drag&Drop und habe es bisher nur mit Labels gemacht. Kennt jemand gute Seiten, bei denen es ein bisschen erklärt wird? 
Vielen Dank schonmal!


----------



## Wildcard (12. Dez 2007)

http://www.eclipse.org/articles/Article-Workbench-DND/drag_drop.html


----------



## sutcha (13. Dez 2007)

Vielen Dank, schau ich mir gleich an! 
Ich hab gestern bei Google nichts vernünftiges gefunden, hab wohl falsch gesucht...


----------



## sutcha (13. Dez 2007)

diese Beispiel ist ja nicht ganz so trivial  Ich habe bereits mit Labels gearbeitet, aber da habe ich nur den Text "verschoben",  also von ein label zum anderen.
Jedes Item im Baum entspricht einem Obejkt und ich möchte dort nur eine ID durch den Drop verändern. Momentan habe ich aber ein bisschen Probleme mit den Transfer-Typen. Kann mir da jemand helfen?


----------



## sutcha (25. Mrz 2008)

Wie bekomme ich denn das Element, auf das ich mein anderes Element ziehe? Also quasi das Target?


```
private void createDragSource(final TreeViewer viewer) {
		
	    Transfer[] types = new Transfer[] { TextTransfer.getInstance() };
	    DragSource dragSource = new DragSource(viewer.getTree(), DND.DROP_MOVE);
	    dragSource.setTransfer(types);
	    dragSource.addDragListener(new DragSourceListener() {

	      public void dragStart(DragSourceEvent event) {
	      }

	      public void dragSetData(DragSourceEvent event) {
	    	  IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
	    	  event.data = ((Element) selection.getFirstElement()).attributeValue("id");	        
	      }

	      public void dragFinished(DragSourceEvent event) {
	      }
	    });
	  }
```

So schaut meine Source aus und beim Target habe ich Probleme. Dort gibt es ja keine neue Selection, das heißt ich kann nicht analog vorgehen.
Ich will bei dem DND-Vorgang die ID der Source und des Targets bekommen, weil ich eine Methode habe, die dann weiter arbeitet. Momentan komme ich nicht an die Target ID. Ich brauche nicht die gesamte Funktionalität der DND, daher verwende ich nicht das Gadget.

Kann mir jemand helfen?


----------



## sutcha (8. Apr 2008)

Da mir bisher niemand helfen konnte und scheinbar kaum jemand Ahnung von Drag&Drop bei SWT hat, wollte ich das Gadget-Beispiel mal verwenden. Das Problem dabei ist, dass mir ein paar Dependencies fehlen wie z.B. org.eclipse.core.* oder org.eclipse.ui.*
Woher bekomme ich diese Dependencies? Ich habe versucht in meiner pom.xml einzubinden, aber das funktioniert nicht richtig. Wie bekomme ich die sonst her?


----------



## Wildcard (8. Apr 2008)

> event.data = ((Element) selection.getFirstElement()).attributeValue("id");


Bei TextTransfer kannst du nicht einfach irgendwelche Objekte verschicken. Das muss schon Text sein.


> Das Problem dabei ist, dass mir ein paar Dependencies fehlen wie z.B. org.eclipse.core.* oder org.eclipse.ui.*


Das macht nur sinn wenn du eine Eclipse RCP hast. Bei Standalone SWT möchtest du diese Klassen nicht verwenden.
Hast du dir den verlinkten SWT only Artikel angesehen?
http://www.eclipse.org/articles/Article-SWT-DND/DND-in-SWT.html


----------



## sutcha (8. Apr 2008)

Ja, ich habe auch schon mit Drag&Drop gearbeitet, allerdings nur TextTransfer.
Bei dem TreeViewer würde ich gerne die ID des Elementes, das hinter jedem Tree-Element steckt, als String bzw. Text verschieben.
Leider verstehe ich nicht alles, was hinter dem Gadget steckt bzw. bei RCP.


----------



## Wildcard (8. Apr 2008)

> Ja, ich habe auch schon mit Drag&Drop gearbeitet, allerdings nur TextTransfer.
> Bei dem TreeViewer würde ich gerne die ID des Elementes, das hinter jedem Tree-Element steckt, als String bzw. Text verschieben.


Na also, wenn du schon mit TextTransfer gearbeitet hast, verstehe ich dein Problem nicht.


> Leider verstehe ich nicht alles, was hinter dem Gadget steckt bzw. bei RCP.


Hast du nun eine RCP, oder nicht?


----------



## sutcha (8. Apr 2008)

Nein, ich weiß auch nur ungefähr, was RCP ist. Habe noch nie damit gearbeitet. Momentan habe ich Eclipse EE mit einigen Plugins installiert.
Ich hätte gedacht, das ich mein Problem leichter lösen kann ohne mich zu sehr in das Drag&Drop einzuarbeiten.

Mein Problem mit dem TextTransfer ist, dass ich meine Quelle nicht zum Ziel verschieben will, sondern dass ich die gleiche Information, die ich aus der Quelle nutze, auch aus dem Ziel herausnehmen will.

A (ID = 1) ist die Quelle und B (ID = 5) ist das "Ziel". Nun möchte ich quasi die ID von A zwischenspeichern und die ID von B nach dem Drop bekommen.
Ansonsten muss ich wirklich das Tree-Item verschieben, was ich momentan nicht ganz verstehe bzw. wofür ich dann dieses Gadget-Beispiel verwenden würde.


----------



## freaksta (15. Jul 2008)

Ich weiss nicht ob dein Problem noch aktuell ist aber hier findest du ein Codesnippet, wo sowas gemacht wird:

http://dev.eclipse.org/viewcvs/inde...g/eclipse/swt/snippets/Snippet91.java?view=co

Dabei musst du, wenn du den TreeViewer verwendest xy.getTree() aufwenden als Target bzw Source. Dann klappt das ganz gut.


----------

