TextFlow is special layout designed to lay out rich text.
It can be used to layout several Text nodes in a single text flow.
The TextFlow uses the text and the font of each Text node inside of it
plus it own width and text alignment to determine the location for each child.
A single Text node can span over several lines due to wrapping and
the visual location of Text node can differ from the logical location
due to bidi reordering.
Any other Node, rather than Text, will be treated as embedded object in the text layout. It will be inserted in the content using its preferred width, height, and baseline offset.
When a Text node is inside of a TextFlow some its properties are ignored.
For example, the x and y properties of the Text node are ignored since
the location of the node is determined by the parent. Likewise, the wrapping
width in the Text node is ignored since the width used for wrapping
is the TextFlow's width. The value of the pickOnBounds property
of a Text is set to false when it is laid out by the
TextFlow. This happens because the content of a single Text node can
divided and placed in the different locations on the TextFlow (usually due to
line breaking and bidi reordering).
The wrapping width of the layout is determined by the region's current width. It can be specified by the application by setting the textflow's preferred width. If no wrapping is desired, the application can either set the preferred with to Double.MAX_VALUE or Region.USE_COMPUTED_SIZE.
Paragraphs are separated by '\n' present in any Text child.
Example of a TextFlow:
Text text1 = new Text("Big italic red text");
text1.setFill(Color.RED);
text1.setFont(Font.font("Helvetica", FontPosture.ITALIC, 40));
Text text2 = new Text(" little bold blue text");
text2.setFill(Color.BLUE);
text2.setFont(Font.font("Helvetica", FontWeight.BOLD, 10));
TextFlow textFlow = new TextFlow(text1, text2);
TextFlow lays out each managed child regardless of the child's visible property value; unmanaged children are ignored for all layout calculations.
TextFlow may be styled with backgrounds and borders using CSS. See
Region superclass for details.
| width | height | |
|---|---|---|
| minimum | left/right insets | top/bottom insets plus the height of the text content |
| preferred | left/right insets plus the width of the text content | top/bottom insets plus the height of the text content |
| maximum | Double.MAX_VALUE | Double.MAX_VALUE |
A textflow's unbounded maximum width and height are an indication to the parent that it may be resized beyond its preferred size to fill whatever space is assigned to it.
TextFlow provides properties for setting the size range directly. These properties default to the sentinel value Region.USE_COMPUTED_SIZE, however the application may set them to other values as needed:
textflow.setMaxWidth(500);
Applications may restore the computed values by setting these properties back
to Region.USE_COMPUTED_SIZE.
TextFlow does not clip its content by default, so it is possible that childrens' bounds may extend outside its own bounds if a child's pref size is larger than the space textflow has to allocate for it.
extends