Parentwechsel per Drag and Drop manuell ohne DND von SWT

gmaringer

Mitglied
Hallo!
habe folgendes Problem! in eineme Composite befinden sich mehre Composites in diesen Compoistes befinden sich mehree Canvas.
Diese sind in den Composites verschiebbar und vergrößerbar, das habe ich mit der Cursorposition und mousedown und mousemove listener gelöst! Jetzt möchte ich einem Canvas einen neuen Parent zuordnen! d.h. wenn ich die Maustaste über den canvas derückt halt und bei einem Composite ein mouseEnter Event aufrufe, dann soll die Canvas diese Composite als Parent erhalten! Ich habe also ein SWT.Mousdown event für das Canvas und ein MouseEnterEvent für das Composite! Leider funkt. das MouseEnterEvent nicht mehr wenn die Maustaste auf dem Canvas gedrückt bleibt! d.h ich möchte einen sogenannten Drag&Drop Effekt der aber selber ausprogrammiert ist, da ich möchte, dass das Canvas immer sichtbar bleibt und weiter verschiebbar ist wenn es einen neuen parent erhält!
Hier nocht etwas Code:
Code:
//Mouslistener für das Canvas      canvas.addListener(SWT.MouseDown, new Listener(){
            public void handleEvent(Event event) {
               activeCanvas=canvas;   
            }
            
         });
         canvas.addListener(SWT.MouseUp, new Listener(){
            public void handleEvent(Event event) {
               activeCanvas=null;   
            }
         });
Code:
//EnterListener für das Compiste
   comp.addListener(SWT.MouseEnter, new Listener(){

      public void handleEvent(Event event) {
         if(activeCanvas!=null){
            activeCanvas.setParent(comp);
         }

      }
      
   });
 
Hallo,

ich habe sowas ähnliches mal mit Swing gemacht. Weiß nicht mehr so ganz wie das war, werde aber später mal nachschauen, hab im moment leider keine zeit.
Bei mir war es ein Schachbrett, auf dem ich Figuren bewegen konnte.
Auf einem großen JPanel waren die Schachfelder, die ebenfalls JPanels waren. Jedes Schachfeld hatte einen MouseMotionListener mit dem ich dann die Mausbewegung abfragen konnte und einen MouseListener mit dem ich anschließend die Figur bewegt habe. Jede Figur hatte einen MouseListener, mit der ich abgefragt habe, ob ich mich mit der Maus auf der Figur befinde, sobald ich mit der Maus auf der Figur war, wurde die Figur noch in einem TmpObject gespeichert und der MouseListener entfernt. Dadurch konnte ich dann mit dem MouseListener des Schachfeldes den Klick abfangen und durch das Tmp-Objekt wusste ich welches Object ich bewegen wollte. Durch den MouseMotionListener konnte ich dann immer die Position berechnen.
Ich hoffe ich hab mich verständlich ausgedrückt. Werde heute mittag mal nach dem Quelltext schauen und den posten.

MFG

zEriX
 
meine erste frage ist zwar noch nicht erlidigt aber die zweite folgt schon: also ich erstell einen Hintergrund aus canvas und dann erstelle ich im prgramm weitere canvas in der composite ! leider liegen die dann hinter dem Hintergrund! wie kann ich also sagen das das frisch erzeugte canvas vor dem vorhandenen canvas lieg? Alos die Ebenenreihenfolge ändern!!
 
Hallo!
hab jetzt beide Probleme gelöst!

1. Problem:
da der Mousemove Listener des Canvas nicht verschwindet! eröffne ich nach dem KLick auf das Canvas einen MouseMoveListener mit dem ich prüfe ob ich mich noch über dem canvas befinde oder nicht! wenn ich außerhalb bin prüfe ich über welchen Composite ich mich befinde! Ich setzte den parent des Canvas dann auf das Composite auf dem ich mich befinde!

Das zweite Problem ist so gelöst sobald ich auf das Canvas klicke führe ich canvas.moveAbove(null) aus und schon liegt es ganz oben!
 
Zurück