2011-01-15 11 views
2

Ich habe das Hinzufügen von Ports als Kinder zu einem Rechteck Abbildung/EditPart/Model unter Verwendung des Logikbeispiels als Referenz implementiert. Die Port-Abbildungen werden wie erwartet angezeigt, und das Debugging zeigt, dass die EditParts und Modelle erstellt und dem übergeordneten Element hinzugefügt wurden, die untergeordneten Elemente jedoch nicht auswählbar sind.Wie werden Kinderfiguren in GEF auswählbar gemacht?

Im EditPart für die Kinder, ich isSelectable() außer Kraft setzen true zurück.

Im Elternteil versuchte ich, createChildEditPolicy() zu überschreiben, um NonResizableEditPolicy zurückzugeben, indem ich die Empfehlung um Kinder nicht auswählbar zu machen here, aber es scheint nichts zu tun. Wenn ich NonResizableEditPolicy als SELECTION_FEEDBACK_ROLE im EditPart des untergeordneten Elements installiere, wird es zunächst beim Erstellen ausgewählt, kann aber später nicht ausgewählt werden.

Auch wenn die Figur des Kindes angeklickt wird, wird die übergeordnete nicht ausgewählt entweder - es ist ein toter Ort, an dem Klicken nicht Auswahl nicht ändert.

Fehle ich etwas, um es wählbar zu machen, oder ist es wahrscheinlich, dass etwas anderes störend ist?

Antwort

2

können Sie mit Debugger versuchen getEditPartAt (Point) und Schritthaltepunkt für die Zuschauer von dort zu setzen, wo es geht. Dies sollte ausgelöst werden, wenn Sie auf das Kind klicken.

Es kann sein, dass es nur keine Auswahl Feedbacks erstellt, so können Sie auch versuchen, die viewer.getSelectedEditParts() auszugeben, um zu überprüfen, dass die Auswahl tatsächlich dort ist, aber das Feedback fehlt.

+0

Ich nehme an, Sie meinen getObjectAt (Point) - die ein EditPart zurückgibt. Es wird nicht ausgelöst, und getSelectedEditParts() ist auch nicht. Das Auswahlwerkzeug ist so eingestellt, dass nur ein Objekt ausgewählt wird, und wenn ich auf das Kind klicke, bleibt die vorherige Auswahl weiterhin ausgewählt, ohne dass den Auswahlmöglichkeiten etwas hinzugefügt wird. – Chris

+1

Ok, hat die Funktion getDragTracker() in dieser untergeordneten EditPart-Klasse überschrieben? Wenn nicht, überprüfen Sie, ob die Super-Klasse es tut, oder fahren Sie einfach, um den grundlegenden DragTracker bereitzustellen. Wenn das null zurückgibt, könnte dies ein Grund sein. Wenn DragTracker vorhanden ist, können Sie mit DragTrackers mouseDown-Funktion überprüfen, was gerade passiert. –

+0

Eclipse hat mehrere Standardmethoden (// TODO Auto-generated method stub), einschließlich getDragTracker(). Sobald ich diese entfernt habe, funktioniert es jetzt. Danke für die Lösung Hotzilla. Leider habe ich kein Konto erstellt, sodass ich mich nicht anmelden kann, um Ihre Antwort zu akzeptieren. – Chris

0

Ich treffe das gleiche Problem, und beheben Sie es in der Art: versuchen Sie, eine geeignete Richtlinie in der Editpart zu installieren.

@Override 
    protected void createEditPolicies() { 
     installEditPolicy(EditPolicy.LAYOUT_ROLE, yourEditPolicy()); 
    } 
Verwandte Themen