Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
wieso muss ich eine Figure immer einen Rectangle übergeben. Wenn ich eine Shape male, dann will ich auch nur die Shape darstellen bzw. beim Selektieren nur die Shape markieren, jedoch wird der Rectangle markiert. Kann man es irgendwie umgehen?
wenn ich bei dem Shape den backgroundColor setze, dann macht der Beispielsweise an dem Figure komplette Anpassung der Hintergundfarbe an dem Rectangle und nicht nur an der Shape mit dem gezeichneten Polgons. Oder anders gesagt, wenn ich die Shape selektiere, will ich nicht die Rectangle die um dieses Shape ist selektieren, sondern nur das Polgon oder Polyline selektieren. Und mit dem Selektieren meine ich die Umrandung des Rectangle zum Skallieren oder verschieben.
Figures sind immer viereckig.
Die Form die in ihnen gezeichnet sind, ist ihnen egal. Das gilt auch für das Shape. Das kann ja schließlich nicht wissen, was du da rein zeichnest.
Deswegen werden die SelectionHandles standardmäßig auch immer an den 4 Ecken des Figures platziert.
Willst du andere Positionen für deine SelectionHandles, musst du sie selbst erzeugen.
Dafür muss das Parent Edit Part eine LayoutEditPolicy erhalten, welche die SelectionHandles entsprechend erzeugt.
Ob und wie diese positioniert werden können musst du dann untersuchen. Ich habe bisher nur die SelectionHandles versteckt, aber nicht an bestimmte Positionen gesetzt.
und wie kann man das Selectionhandles verstecken? Grundsätzlich bräuchte ich es auch nicht. Und der Hintergrund eines Shapes, kann es auch transparent gemacht werden (vielleicht mit figure#setOpaque(false)), weil wenn ich zwei Polgyons habe, und die sind von Rectangle überlappend und ich will das untere selektieren, ist es recht schwer es zu erwischen.
Und der Hintergrund eines Shapes, kann es auch transparent gemacht werden (vielleicht mit figure#setOpaque(false)), weil wenn ich zwei Polgyons habe, und die sind von Rectangle überlappend und ich will das untere selektieren, ist es recht schwer es zu erwischen.
Schon wieder sehr schwer nachzuvollziehen was du hier möchtest. Ich versuche mich einfach mal.
Du hast 2 Shapes übereinander liegen. Nun willst du ein Shape auswählen (vornehmlich anhand der gezeichneten Fläche). GEF wählt die Shapes aber anhand der Bounds aus (das ist das, was du als Rectangle bezeichnest). Was das mit dem Hintergrund zu tun hat, weiß ich nun nicht, daher bin ich jetzt verwirrt und nicht sicher ob ich dich auch richtig verstanden habe...
Sollte ich aber mit meiner Interpretation richtig liegen und du möchtest, dass nur dann das Figure ausgewählt wird, wenn die gezeichnete Fläche angeklickt wird, dann musst du die Methode Figure#findDescendantAtExcluding(int, int, TreeSearch) überschreiben und entsprechend anpassen.
Hi Sonecc, genau das meine ich. Aber wie soll ich die Methode so überschreiben dass sobald das was gezeichnet ist in der Figure auch selektiert wird mit Figure#findDescendantAtExcluding(int, int, TreeSearch), soll ich das mithilfe der Koordinatenposition dann rausfinden?
Ja.
Die Implementierung der Methode kannst du dir ja im Source code anschauen.
Es wird dort überprüft ob der angegebene Punkt innerhalb der ClientArea des Figures liegt.
Statt dieser Prüfung musst du dann prüfen ob der angegebene Punkt innerhalb deines gezeichneten Shapes liegt.
Beispiel für ein Dreieck: (Genutzt wird java.awt.Polygon)
Java:
Polygon p = new Polygon();
p.addPoint( 2, 6 );
p.addPoint( 5, 2 );
p.addPoint( 8, 6 );
p.contains(5,2);