# TreeViewer knoten manuell umsortieren



## Triifwyer (13. Dez 2011)

Hi,

ich verwende einen TreeViewer in dem diverse Sachen reindroppen lassen kann. Es gibt keine "richtige" Sortierung sondern nur so wie der Benutzer es mag, weswegen ich das nicht automatisch machen kann. Deswegen soll man die Knoten einfach umsortieren können. Wie kann ich feststellen ob ein Knoten "zwischen" zwei Gui-TreeItems fallen gelassen wird?

Ich wollte dann nämlich die position im Modell aktualisieren, damit ich nicht die gui-sortierung separiert speichern muss.

Jemand eine Ahnung wie das geht?


----------



## earlgrey_tea (14. Dez 2011)

Hmmm, mal dir allwissende Müllkippe befragt? Ich finde die ersten 2 Antworten bei 
	
	
	
	





```
Drag n Drop JTree
```
 sollten deiner Problemstellung entsprechen, oder irr ich mich (dann bitte korrigieren  ): 

kleines-stark-vereinfachtes-beispiel-zu-drag-n-drop-beim-jtree.html
/jw-javatip97

Stell doch mal nen Beispielquelltext rein, interessieren täts mich auch.


----------



## Triifwyer (14. Dez 2011)

Hi,

danke, aber ich hätte dazu sagen sollen, dass es kein Swing ist. Ich arbeite mit SWT. Gibts da keinen vorgesehen oder halbfertigen Weg für?


----------



## earlgrey-tea (14. Dez 2011)

Das tut mir leid, aber von SWT hab ich keinen Plan. Veilleicht fütterst du google mal mit ähnlichen Begriffen; nur halt auf SWT gemünzt.


----------



## Stelufl (14. Dez 2011)

Hi.

Das ist nicht ganz leicht. Wenn es leichter geht, schlagt mich, aber ich hätte spontan die Idee: 
Du musst aus dem Event einen Point bilden, in dem Du die Info hast, an welcher Stelle auf dem Tree das Item "fallengelassen" wurde. 
dann machst du [c]treeViewer.getTree().getItem(Point point);[/c] und bekommst damit das jeweilige Item. 
Nun musst du noch prüfen, ob das Item in den oberen 50% oder in den unteren 50% der Zeile fallengelassen wurde. Das ist auch nicht ganz einfach. Du musst (ohne das jetzt getestet zu haben) getBounds() auf diesem TreeItem ausführen und bekommst damit die Koordinaten innerhalb des Trees. Wenn Dein Point jetzt bei Y 350 ist und das TreeItem bei 345 beginnt und die Höhe 25 beträgt, dann rechnest du also: 350-345 = 5 = obere 20%.

Obere 50%-> Darüber einfügen.
Untere 50%-> Darunter einfügen.

Genau 50.00% -> Ob das geht weiß nicht, aber für diesen Fall solltest du das "fallenlassen" nicht erlauben, d. h. du brauchst noch einen MoveListener auf dem gesamten TreeViewer.


----------

