I Scene
haben, die auf die Scene
meiner primaryStage eingestellt ist, dass - neben anderen Knoten - enthält eine VBox
mit einem TableView
und einige Tasten. Wenn ich eine Momentaufnahme in einer Zeile in der Tabelle unter Verwendung TableRow.snapshot(null, null)
mache, wird die Größe der Scene
geändert. Die Breite wird um etwa 10 Pixel geändert, während die Höhe um etwa 40 - manchmal mehr als 600 (!) - Pixel geändert wird.Node.snapshot (null, null) ändert die Größe der Szene
Dies passiert, weil Node.snapshot(null, null)
Scene.doCSSLayoutSyncForSnapshot(Node node)
aufruft, die die bevorzugte Größe aller Knoten in der Größe zu erhalten scheint und die Größe neu berechnen. Dies gibt irgendwie die falschen Werte zurück, da meine Knoten nur bevorzugte Größen haben und groß aussehen, bevor diese Methode aufgerufen wird. Gibt es einen Weg dies zu verhindern?
Die Größenänderung ist ein Problem, aber es ist auch ein Problem, dass die Primärstufe die Größe nicht mit der Scene
ändert, die es enthält.
Ich habe versucht, einen MCVE zu erstellen, der das Problem reproduziert, aber nach ein paar Tagen, in denen ich das versuche, kann ich das Problem nicht reproduzieren. Das ursprüngliche Programm enthält ungefähr 2000 Codezeilen, die ich hier nicht veröffentlichen möchte.
Warum würde Scene.doCSSLayoutSyncForSnapshot(Node node)
mein Layout kompromittieren, wenn es richtig angelegt ist? Kann ich irgendwie sicherstellen, dass das Layout richtig synchronisiert ist, bevor diese Methode aufgerufen wird, um sicherzustellen, dass es nichts ändert?
gut können Sie versuchen, Einschränkungen auf Ihrem Knoten vor dem evozieren diese Funktion zu setzen und rückgängig machen sie, ich meine, ' setMinSize (Pane.USE_PREF_SIZE, Pane.USE_PREF_SIZE); 'und' setMaxSize (Pane.USE_PREF_SIZE, Pane.USE_PREF_SIZE); 'könnte helfen, wie Sie Ihr Problem beschrieben haben, :) – Elltz
Danke, dass Sie nicht alle 2000 Codezeilen gepostet haben. Aber wenn Sie ein kurzes, kompilierbares Beispiel schreiben können, um das Problem zu reproduzieren, das hilfreich wäre. Sonst ein Link zu all deinem Code, wenn du ein kleines Sample nicht reproduzieren kannst? – Amber
Ich empfehle, [Scenic View] (http://fxexperience.com/scenic-view/) zu verwenden, mit dem Sie alle Eigenschaften einer View während der Laufzeit Ihrer GUI anzeigen können. So können Sie zumindest überprüfen, ob das Problem, das Sie beschreiben, wirklich das Problem ist. Sie können auch einige Screenshots mit Scenic View veröffentlichen. Mit diesem Tool können Sie auch alle Ereignisse in Ihrer GUI anzeigen. Ich benutze es sehr :-) – Westranger