- All Implemented Interfaces:
Styleable
,EventTarget
public class TextFlow extends Pane
Text
nodes in a single text flow.
The TextFlow uses the text and the font of each Text
node inside of it
plus its 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 Node, other than Text, will be treated as an 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 of 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.
Resizable Range
A textflow's parent will resize the textflow within the textflow's range during layout. By default the textflow computes this range based on its content as outlined in the tables below.
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.
- Since:
- JavaFX 8.0
-
Property Summary
Properties Type Property Description DoubleProperty
lineSpacing
Defines the vertical space in pixel between lines.IntegerProperty
tabSize
The size of a tab stop in spaces.ObjectProperty<TextAlignment>
textAlignment
Defines horizontal text alignment.Properties inherited from class javafx.scene.layout.Region
background, border, cacheShape, centerShape, height, insets, maxHeight, maxWidth, minHeight, minWidth, opaqueInsets, padding, prefHeight, prefWidth, scaleShape, shape, snapToPixel, width
Properties inherited from class javafx.scene.Parent
needsLayout
Properties inherited from class javafx.scene.Node
accessibleHelp, accessibleRoleDescription, accessibleRole, accessibleText, blendMode, boundsInLocal, boundsInParent, cacheHint, cache, clip, cursor, depthTest, disabled, disable, effectiveNodeOrientation, effect, eventDispatcher, focused, focusTraversable, hover, id, inputMethodRequests, layoutBounds, layoutX, layoutY, localToParentTransform, localToSceneTransform, managed, mouseTransparent, nodeOrientation, onContextMenuRequested, onDragDetected, onDragDone, onDragDropped, onDragEntered, onDragExited, onDragOver, onInputMethodTextChanged, onKeyPressed, onKeyReleased, onKeyTyped, onMouseClicked, onMouseDragEntered, onMouseDragExited, onMouseDragged, onMouseDragOver, onMouseDragReleased, onMouseEntered, onMouseExited, onMouseMoved, onMousePressed, onMouseReleased, onRotate, onRotationFinished, onRotationStarted, onScrollFinished, onScroll, onScrollStarted, onSwipeDown, onSwipeLeft, onSwipeRight, onSwipeUp, onTouchMoved, onTouchPressed, onTouchReleased, onTouchStationary, onZoomFinished, onZoom, onZoomStarted, opacity, parent, pickOnBounds, pressed, rotate, rotationAxis, scaleX, scaleY, scaleZ, scene, style, translateX, translateY, translateZ, viewOrder, visible
-
Field Summary
Fields inherited from class javafx.scene.layout.Region
USE_COMPUTED_SIZE, USE_PREF_SIZE
Fields inherited from class javafx.scene.Node
BASELINE_OFFSET_SAME_AS_HEIGHT
-
Constructor Summary
-
Method Summary
Modifier and Type Method Description PathElement[]
caretShape(int charIndex, boolean leading)
Returns shape of caret in local coordinates.protected double
computeMinHeight(double width)
Computes the minimum height of this region.protected double
computePrefHeight(double width)
Computes the preferred height of this region for the given width; Region subclasses should override this method to return an appropriate value based on their content and layout strategy.protected double
computePrefWidth(double height)
Computes the preferred width of this region for the given height.double
getBaselineOffset()
Calculates the baseline offset based on the first managed child.static List<CssMetaData<? extends Styleable,?>>
getClassCssMetaData()
Orientation
getContentBias()
Returns the orientation of a node's resizing bias for layout purposes.List<CssMetaData<? extends Styleable,?>>
getCssMetaData()
This method should delegate toNode.getClassCssMetaData()
so that a Node's CssMetaData can be accessed without the need for reflection.double
getLineSpacing()
Gets the value of the property lineSpacing.int
getTabSize()
Gets the value of the property tabSize.TextAlignment
getTextAlignment()
Gets the value of the property textAlignment.HitInfo
hitTest(Point2D point)
Maps local point to index in the content.protected void
layoutChildren()
Invoked during the layout pass to layout the children in thisParent
.DoubleProperty
lineSpacingProperty()
Defines the vertical space in pixel between lines.Object
queryAccessibleAttribute(AccessibleAttribute attribute, Object... parameters)
This method is called by the assistive technology to request the value for an attribute.PathElement[]
rangeShape(int start, int end)
Returns shape for the range of the text in local coordinates.void
requestLayout()
Requests a layout pass to be performed before the next scene is rendered.void
setLineSpacing(double spacing)
Sets the value of the property lineSpacing.void
setTabSize(int spaces)
Sets the value of the property tabSize.void
setTextAlignment(TextAlignment value)
Sets the value of the property textAlignment.protected void
setWidth(double value)
Sets the value of the property width.IntegerProperty
tabSizeProperty()
The size of a tab stop in spaces.ObjectProperty<TextAlignment>
textAlignmentProperty()
Defines horizontal text alignment.boolean
usesMirroring()
Determines whether a node should be mirrored when node orientation is right-to-left.Methods inherited from class javafx.scene.layout.Pane
getChildren
Methods inherited from class javafx.scene.layout.Region
backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, computeMaxHeight, computeMaxWidth, computeMinWidth, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isResizable, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
Methods inherited from class javafx.scene.Parent
getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestParentLayout, setNeedsLayout, updateBounds
Methods inherited from class javafx.scene.Node
accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, executeAccessibleAction, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInitialFocusTraversable, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, viewOrderProperty, visibleProperty
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface javafx.css.Styleable
getStyleableNode
-
Property Details
-
textAlignment
Defines horizontal text alignment.- Default value:
- TextAlignment.LEFT
- See Also:
getTextAlignment()
,setTextAlignment(TextAlignment)
-
lineSpacing
Defines the vertical space in pixel between lines.- Default value:
- 0
- Since:
- JavaFX 8.0
- See Also:
getLineSpacing()
,setLineSpacing(double)
-
tabSize
The size of a tab stop in spaces. Values less than 1 are treated as 1. This value overrides thetabSize
of containedText
nodes.- Default value:
- 8
- Since:
- 14
- See Also:
getTabSize()
,setTabSize(int)
-
-
Constructor Details
-
TextFlow
public TextFlow()Creates an empty TextFlow layout. -
TextFlow
Creates a TextFlow layout with the given children.- Parameters:
children
- children.
-
-
Method Details
-
hitTest
Maps local point to index in the content.- Parameters:
point
- the specified point to be tested- Returns:
- a
HitInfo
representing the character index found - Since:
- 9
-
caretShape
Returns shape of caret in local coordinates.- Parameters:
charIndex
- the character index for the caretleading
- whether the caret is biased on the leading edge of the character- Returns:
- an array of
PathElement
which can be used to create aShape
- Since:
- 9
-
rangeShape
Returns shape for the range of the text in local coordinates.- Parameters:
start
- the beginning character index for the rangeend
- the end character index (non-inclusive) for the range- Returns:
- an array of
PathElement
which can be used to create aShape
- Since:
- 9
-
usesMirroring
public boolean usesMirroring()Description copied from class:Node
Determines whether a node should be mirrored when node orientation is right-to-left.When a node is mirrored, the origin is automatically moved to the top right corner causing the node to layout children and draw from right to left using a mirroring transformation. Some nodes may wish to draw from right to left without using a transformation. These nodes will will answer
false
and implement right-to-left orientation without using the automatic transformation.- Overrides:
usesMirroring
in classNode
- Returns:
- true if this
Node
should be mirrored
-
setWidth
protected void setWidth(double value)Description copied from class:Region
Sets the value of the property width. -
computePrefWidth
protected double computePrefWidth(double height)Description copied from class:Region
Computes the preferred width of this region for the given height. Region subclasses should override this method to return an appropriate value based on their content and layout strategy. If the subclass doesn't have a VERTICAL content bias, then the height parameter can be ignored.- Overrides:
computePrefWidth
in classRegion
- Parameters:
height
- the height that should be used if preferred width depends on it- Returns:
- the computed preferred width for this region
-
computePrefHeight
protected double computePrefHeight(double width)Description copied from class:Region
Computes the preferred height of this region for the given width; Region subclasses should override this method to return an appropriate value based on their content and layout strategy. If the subclass doesn't have a HORIZONTAL content bias, then the width parameter can be ignored.- Overrides:
computePrefHeight
in classRegion
- Parameters:
width
- the width that should be used if preferred height depends on it- Returns:
- the computed preferred height for this region
-
computeMinHeight
protected double computeMinHeight(double width)Description copied from class:Region
Computes the minimum height of this region. Returns the sum of the top and bottom insets by default. Region subclasses should override this method to return an appropriate value based on their content and layout strategy. If the subclass doesn't have a HORIZONTAL content bias, then the width parameter can be ignored.- Overrides:
computeMinHeight
in classRegion
- Parameters:
width
- the width that should be used if min height depends on it- Returns:
- the computed minimum height for this region
-
requestLayout
public void requestLayout()Description copied from class:Parent
Requests a layout pass to be performed before the next scene is rendered. This is batched up asynchronously to happen once per "pulse", or frame of animation.If this parent is either a layout root or unmanaged, then it will be added directly to the scene's dirty layout list, otherwise requestParentLayout will be invoked.
- Overrides:
requestLayout
in classParent
-
getContentBias
Description copied from class:Node
Returns the orientation of a node's resizing bias for layout purposes. If the node type has no bias, returns null. If the node is resizable and it's height depends on its width, returns HORIZONTAL, else if its width depends on its height, returns VERTICAL.Resizable subclasses should override this method to return an appropriate value.
- Overrides:
getContentBias
in classNode
- Returns:
- orientation of width/height dependency or null if there is none
- See Also:
Node.isResizable()
,Node.minWidth(double)
,Node.minHeight(double)
,Node.prefWidth(double)
,Node.prefHeight(double)
,Node.maxWidth(double)
,Node.maxHeight(double)
-
layoutChildren
protected void layoutChildren()Description copied from class:Parent
Invoked during the layout pass to layout the children in thisParent
. By default it will only set the size of managed, resizable content to their preferred sizes and does not do any node positioning.Subclasses should override this function to layout content as needed.
- Overrides:
layoutChildren
in classParent
-
setTextAlignment
Sets the value of the property textAlignment.- Property description:
- Defines horizontal text alignment.
- Default value:
- TextAlignment.LEFT
-
getTextAlignment
Gets the value of the property textAlignment.- Property description:
- Defines horizontal text alignment.
- Default value:
- TextAlignment.LEFT
-
textAlignmentProperty
Defines horizontal text alignment.- Default value:
- TextAlignment.LEFT
- See Also:
getTextAlignment()
,setTextAlignment(TextAlignment)
-
setLineSpacing
public final void setLineSpacing(double spacing)Sets the value of the property lineSpacing.- Property description:
- Defines the vertical space in pixel between lines.
- Default value:
- 0
- Since:
- JavaFX 8.0
-
getLineSpacing
public final double getLineSpacing()Gets the value of the property lineSpacing.- Property description:
- Defines the vertical space in pixel between lines.
- Default value:
- 0
- Since:
- JavaFX 8.0
-
lineSpacingProperty
Defines the vertical space in pixel between lines.- Default value:
- 0
- Since:
- JavaFX 8.0
- See Also:
getLineSpacing()
,setLineSpacing(double)
-
tabSizeProperty
The size of a tab stop in spaces. Values less than 1 are treated as 1. This value overrides thetabSize
of containedText
nodes.- Default value:
- 8
- Since:
- 14
- See Also:
getTabSize()
,setTabSize(int)
-
getTabSize
public final int getTabSize()Gets the value of the property tabSize.- Property description:
- The size of a tab stop in spaces.
Values less than 1 are treated as 1. This value overrides the
tabSize
of containedText
nodes. - Default value:
- 8
- Since:
- 14
-
setTabSize
public final void setTabSize(int spaces)Sets the value of the property tabSize.- Property description:
- The size of a tab stop in spaces.
Values less than 1 are treated as 1. This value overrides the
tabSize
of containedText
nodes. - Default value:
- 8
- Since:
- 14
-
getBaselineOffset
public final double getBaselineOffset()Description copied from class:Parent
Calculates the baseline offset based on the first managed child. If there is no such child, returnsNode.getBaselineOffset()
.- Overrides:
getBaselineOffset
in classParent
- Returns:
- baseline offset
-
getClassCssMetaData
- Returns:
- The CssMetaData associated with this class, which may include the CssMetaData of its superclasses.
-
getCssMetaData
Description copied from class:Region
This method should delegate toNode.getClassCssMetaData()
so that a Node's CssMetaData can be accessed without the need for reflection.- Specified by:
getCssMetaData
in interfaceStyleable
- Overrides:
getCssMetaData
in classRegion
- Returns:
- The CssMetaData associated with this node, which may include the CssMetaData of its superclasses.
-
queryAccessibleAttribute
This method is called by the assistive technology to request the value for an attribute.This method is commonly overridden by subclasses to implement attributes that are required for a specific role.
If a particular attribute is not handled, the superclass implementation must be called.- Overrides:
queryAccessibleAttribute
in classParent
- Parameters:
attribute
- the requested attributeparameters
- optional list of parameters- Returns:
- the value for the requested attribute
- See Also:
AccessibleAttribute
-