You're thinking about the docs of the note in the bounds properties I think:
https://openjfx.io/javadoc/21/javafx.graphics/javafx/scene/Node.html#boundsInLocalProperty() https://openjfx.io/javadoc/21/javafx.graphics/javafx/scene/Node.html#boundsInParentProperty() On Fri, Feb 9, 2024, 03:28 John Hendrikx <john.hendr...@gmail.com> wrote: > Hi, > > I'm pretty sure I read somewhere in JavaFX docs, code or website that > binding certain properties which are changed during layout is a really > bad idea, but I can't find where I've seen this. Anyone know what I mean? > > It was something like: binding the values of a property like > width/height which are changed during layout to another property (which > may in turn affect layout) should not be done, and one should be using > properties like min/pref/max width/height. > > The reason I ask is because I'm running into a weird problem where I'm > binding the value of ScrollPane.viewportBoundsProperty.width to a > Label's text property. What I noticed is that the Label simply is not > updating correctly, and will display the correct value **BUT** use the > previous value for its width calculation which causes the text to not > fit -- the fact that it is displayed wrong is especially obvious when > the Label's value switches between values like "312.0" and > "313.333333333" where the 2nd value often gets an ellipsis (like > "31...") because its width was computed based on "312.0". What I see > happening is this: > > - A splitpane is resized (with a scrollpane in it) > - The ScrollPane's viewportBoundsProperty changes (in layoutChildren > code of ScrollPaneSkin), so layout is already running... > - A binding on viewportBoundsProperty.width updates the label text from > "312.0" to "313.33333333" > > However, before that binding is executed, I see a call to > `computePrefWidth` on the Label, which uses the old text (ie. "312.0") > -- there is NO other call to computePrefWidth, so the layout process > continues with an incorrect width value... > > When later the layout code of the Label is called, it concludes that the > current width (based on the text "312.0") is insufficient to display > "313.33333333", and so adds an ellipsis... > > So, I'm thinking this may be "expected" behavior -- I'm binding on a > property that is updated during layout, and then making another change > (to Label.text) which in turn should trigger a new layout. However, > that doesn't happen, and it just runs in the current layout, where it > then uses part new, part old values (new text, but old width). > > Any insights are appreciated. > > --John > > >