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.
JavaFXVorschau Bereich/Fenster einer bestehenden Group
Ich habe eine Pane (Group) welche über das Mausrad skaliert werden kann. Nun möchte eine Art Vorschaufenster von genau dieser Pane anzeigen, was einen anderen Skalierbereich von der Orignal Pane darstellt. Also wie das Vorschaufenster in Googlemaps zum Bsp. Hat jemand eine Idee wie ich das in JavaFX realisieren kann? Also die Pane wo anders einbette mit einem anderen Skalierbereich?
Ich bin mir noch nicht zu 100% sicher, dass ich dich verstanden hab... Hier mal, was ich mitgenommen hab:
Du hast ein Pane, in dem du quasi zoomen kannst (via Mausrad, á la GoogleMaps).... Und hier wird's für mich etwas schwammig.
Du möchtest dieses Pane als Miniatur woanders einbetten? Wenn ja: Du kannst von Nodes Screenshots machen - die könntest du in ImageViews anzeigen. Oder du machst ein StackPane (erst der Content deiner Seite, dann dein herunterskaliertes Pane an anderer Stelle (translateX/Y) darauf) und skalierst auf einen klick oder so wieder hoch (Am besten via Animation oder so).
Aber da ich nicht so genau weiss, was du wolltest, müsstest du es vielleicht noch einmal erklären. Vielleicht ein paar Skizzen/Mockups, die zeigen was du willst. Oder Screenshots. Je nachdem.
Ja Du hast es richtig verstanden und mit dem ImageView wäre vermutlich eine Lösung unter Swing hätte ich es so versucht. Wollte es aber mal mit FX versuchen.
Das mit der Stackpane habe ich nicht verstanden. Kann man denn die Pane Reference von
meine Oringalen Skalierten Bereich woanders einbetten? Macht er da intern einen Clone der
Grafik? Schön wäre es auch wenn man eine art Sichtbereichfenster in dem Previewpane hätte.
Ich habe mal deinen rat befolgt und als Beispiel ein Bild angefügt ... lässt sich schwer erklären.
Hm. Ich verstehe. Ich glaube wirklich, als erstes solltest du dich mal mit dem StackPane vertraut machen.
Hierbei spiel die Reihenfolge, in der du Children hinzufügst, eine Rolle. Das letzte ist ganz oben. Sie sind grundätzlich "durchsichtig", aber die Events sind das nicht. Da gibt es die Methode
Code:
#setMouseTransparent
(bzw. auch eine respektive BooleanProperty) an Nodes, mit der du einen Teil deiner UI "unsichtbar" für Events machen kann. Oder aber, du ordnest die Elemente in der child-Liste neu an:
JavaDoc/StackPane hat gesagt.:
StackPane lays out its children in a back-to-front stack.
The z-order of the children is defined by the order of the children list with the 0th child being the bottom and last child on top. If a border and/or padding have been set, the children will be layed out within those insets.
The stackpane will attempt to resize each child to fill its content area. If the child could not be sized to fill the stackpane (either because it was not resizable or its max size prevented it) then it will be aligned within the area using the alignment property, which defaults to Pos.CENTER.
StackPane example:
StackPane stack = new StackPane();
stack.getChildren().addAll(new Rectangle(100,100,Color.BLUE), new Label("Go!));
StackPane lays out each managed child regardless of the child's visible property value; unmanaged children are ignored.
StackPane may be styled with backgrounds and borders using CSS. See Region for details.
Dann musst du dein Preview nur an die linke untere Ecke z.B. verschieben (und vorher die maxWidth/maxHeight festlegen).
Was den Inhalt des Previews angeht. Da kann ich nicht wirklich helfen. Ich denke ein Image, dass du hin und her schiebst, je nachdem, wo du gerade in der Hauptansicht bist, wäre die beste Lösung. Ein Canvas vielleicht oben drüber (wieder ein StackPane! yay!), um das rote Rechteck der gerade offenen Region anzuzeigen.