Overview
Base class for scene graph nodes. A scene graph is a tree-like data structure where each item in the tree has zero or one parent, and each item is either a "leaf" with zero sub items or a "branch" with zero or more sub items. (More technically, the scene graph is a directed acyclic graph).
Each item in the scene graph tree is called a Node
. Branch nodes are
either of type Group or of type CustomNode, or a subclass of
thereof. Leaf nodes are classes such as
javafx.scene.shape.Rectangle, javafx.scene.text.Text,
javafx.scene.image.ImageView, javafx.scene.media.MediaView,
or other such leaf nodes. Only a single node within the scene graph will
have no parent, which is often referred to as the "root" node.
String ID
Each node in the scene graph can be given a unique id. This id is much like the "id" attribute of an HTML tag in that it is up to the designer and developer to ensure that theid
is unique within the scene graph.
A convenience function called lookup(String) can be used to find
a node with a unique id within the scene graph, or within a subtree of the
scene graph.
Coordinate System
TheNode
class defines a traditional computer graphics "local"
coordinate system in which the x
axis increases to the right and the
y
axis increases downwards. The concrete node classes for shapes
provide variables for configuring the geometry and location of the shape
within this local coordinate space. For example,
javafx.scene.shape.Rectangle provides x
, y
,
width
, height
variables while
javafx.scene.shape.Circle provides centerX
, centerY
,
and radius
.
Transformations
AnyNode
can have transformations applied to it. These include
translation, rotation, scaling, or shearing transformations.
A translation transformation is one which shifts the origin of the node's
coordinate space along either the x or y axis. For example, if you create a
javafx.scene.shape.Rectangle which is drawn at the origin
(x=0, y=0) and has a width of 100 and a height of 50, and then apply a
javafx.scene.transform.Translate with a shift of 10 along the x axis
(x=10), then the rectangle will appear drawn at (x=10, y=0) and remain
100 points wide and 50 tall. Note that the origin was shifted, not the
x
variable of the rectangle.
A rotation transformation is one which rotates the coordinate space of the node about a specified "pivot" point, causing the node to appear rotated. For example, if you create a javafx.scene.shape.Rectangle which is drawn at the origin (x=0, y=0) and has a width of 100 and height of 30 and you apply a javafx.scene.transform.Rotate with a 90 degree rotation (angle=90) and a pivot at the origin (pivotX=0, pivotY=0), then the rectangle will be drawn as if its x and y were zero but its height was 100 and its width -30. That is, it is as if a pin is being stuck at the top left corner and the rectangle is rotating 90 degrees clockwise around that pin. If the pivot point is instead placed in the center of the rectangle (at point x=50, y=15) then the rectangle will instead appear to rotate about its center.
Note that as with all transformations, the x, y, width, and height variables of the rectangle (which remain relative to the local coordinate space) have not changed, but rather the transformation alters the entire coordinate space of the rectangle.
A scaling transformation causes a node to either appear larger or smaller
depending on the scaling factor. Scaling alters the coordinate space of the
node such that each unit of distance along the axis in local coordinates is
multipled by the scale factor. As with rotation transformations, scaling
transformations are applied about a "pivot" point. You can think of this as
the point in the Node around which you "zoom". For example, if you create a
javafx.scene.shape.Rectangle with a strokeWidth
of 5, and
a width and height of 50, and you apply a
javafx.scene.transform.Scale with scale factors (x=2.0, y=2.0) and
a pivot at the origin (pivotX=0, pivotY=0), the entire rectangle
(including the stroke) will double in size, growing to the right and
downwards from the origin.
A shearing transformation, sometimes called a skew, effectively rotates one axis so that the x and y axes are no longer perpendicular.
Multiple transformations may be applied to a node by specifying an ordered chain of transforms. The order in which the transforms are applied is defined by the sequence specified in the transforms variable.
Bounding Rectangles
Since everyNode
has transformations, every Node
's geometric
bounding rectangle that can be described differently depending on whether
transformations are accounted for or not.
At the simplest, Node
's have a read-only boundsInLocal
variable which specifies the bounding rectangle of the Node
in
untransformed local coordinates. boundsInLocal
includes the
Node
's shape geometry, including any space required for a
non-zero stroke that may fall outside the local position/size variables,
its clip and effect variables (if set).
The layoutBounds variable defines the rectangular bounds of a
Node
that should be used as the basis for layout calculations. By
default this will be equal to boundsInLocal
plus transforms set
in the transforms
variable but does NOT include transforms set by
the explicit translateX, translateY, scaleX,
scaleY, and rotate variables.
Finally, each Node
also has a read-only boundsInParent
variable which specifies the bounding rectangle of the Node
after all
transformations have been applied, including those set in transforms,
translateX, translateY, scaleX, scaleY,
and rotate. It is called "boundsInParent" because the rectangle
will be defined in terms of the parent Node
's coordinate system.
Profile: common
Variable Summary
access | name | type | Can Read | Can Init | Can Write | Default Value | description |
---|---|---|---|---|---|---|---|
public | blocksMouse | Boolean | false |
If If Profile: common conditional mouse |
|||
public-read | boundsInLocal | Rectangle2D |
The rectangular bounds of this The rectangular bounds of this
Note that this method does not take the node's visibility into account;
the test is based on the geometry of this This variable will always be a non-null value. Note that boundsInLocal is automatically recomputed whenever the geometry of a node changes. For this reason, it is an error to bind any of these values in a node to an expression that depends upon this variable. For example, you should not bind the "x" or "y" variables of a shape to boundsInLocal for the purpose of positioning the node. Profile: common |
||||
public-read | boundsInParent | Rectangle2D |
The rectangular bounds of this The rectangular bounds of this
The resulting bounds will be conceptually in the coordinate space of the
Note that this method does not take the node's visibility into account;
the test is based on the geometry of this This variable will always be a non-null value. Note that boundsInParent is automatically recomputed whenever the geometry of a node changes, or when any of the following change: the transforms sequence, the translateX, translateY, scaleX, scaleY, or rotate variable. For this reason, it is an error to bind any of these values in a node to an expression that depends upon this variable. For example, you should not bind the "x", "y", translateX, or translateY variables of a shape to boundsInParent for the purpose of positioning the node. Profile: common |
||||
public-read | boundsInScene | Rectangle2D |
The rectangular bounds of this The rectangular bounds of this
Note that this method does not take the node's visibility into account;
the test is based on the geometry of this This variable will always be a non-null value. Note that boundsInScene is automatically recomputed whenever any transform in any ancestor group node changes, or when the geometry of a node changes, or when any of the following change: the transforms sequence, the translateX, translateY, scaleX, scaleY, or rotate variable. For this reason, it is an error to bind any of these values in a node to an expression that depends upon this variable. For example, you should not bind the "x", "y", translateX, or translateY variables of a shape to boundsInScene for the purpose of positioning the node. Profile: common |
||||
public | cache | Boolean | false |
A performance hint to the system to indicate that this A performance hint to the system to indicate that this Profile: common |
|||
public | clip | Node | null |
Specifies a Specifies a For example, you can use an javafx.scene.image.ImageView Node as a mask to represent the Clip. Or you could use one of the geometric shape Nodes such as javafx.scene.shape.Rectangle or javafx.scene.shape.Circle. Or you could use a javafx.scene.text.Text node to represent the Clip. nullProfile: common conditional clip |
|||
public | cursor | Cursor | null |
Defines the mouse cursor for this Defines the mouse cursor for this Profile: common conditional cursor |
|||
public | disable | Boolean | false |
Sets the individual disabled state of this Sets the individual disabled state of this Profile: common |
|||
public-read | disabled | Boolean | false |
Indicates whether or not this Indicates whether or not this
A disabled Profile: common |
|||
public | effect | Effect | null |
Specifies an effect to apply to this |
|||
public | focusable | Boolean | true |
Specifies whether this Specifies whether this Profile: common |
|||
public-read protected | focused | Boolean | subclass | subclass | false |
Indicates whether this Indicates whether this Profile: common |
|
public-read protected | hover | Boolean | subclass | subclass | false |
Whether or not this Whether or not this Profile: common |
|
public | id | String | empty string |
The id of this The id of this Profile: common |
|||
public-init | layoutBounds | Rectangle2D |
The rectangular bounds that should be used in calculations for both manual
and automatic layout of this The rectangular bounds that should be used in calculations for both manual
and automatic layout of this
Note that the translateX and translateY variables are not
included in the layoutBounds by default. This is important because
layout code must first determine the current size and location of the
Note that the default layoutBounds is automatically recomputed whenever the geometry of a node changes, or when the transforms sequence changes. For this reason, it is an error to bind any of these values in a node to an expression that depends upon this variable. For example, you should not bind the "x" or "y" variables of a shape to layoutBounds for the purpose of positioning the node. Profile: common |
||||
public | onKeyPressed | function(:KeyEvent):Void |
Defines a function to be called when this |
||||
public | onKeyReleased | function(:KeyEvent):Void |
Defines a function to be called when this |
||||
public | onKeyTyped | function(:KeyEvent):Void |
Defines a function to be called when this Defines a function to be called when this Profile: common conditional keyboard |
||||
public | onMouseClicked | function(:MouseEvent):Void |
Defines a function to be called when a mouse button has been clicked
(pressed and released) on this |
||||
public | onMouseDragged | function(:MouseEvent):Void |
Defines a function to be called when a mouse button is pressed
on this |
||||
public | onMouseEntered | function(:MouseEvent):Void |
Defines a function to be called when the mouse enters this |
||||
public | onMouseExited | function(:MouseEvent):Void |
Defines a function to be called when the mouse exits this |
||||
public | onMouseMoved | function(:MouseEvent):Void |
Defines a function to be called when mouse cursor moves within
this |
||||
public | onMousePressed | function(:MouseEvent):Void |
Defines a function to be called when a mouse button
has been pressed on this |
||||
public | onMouseReleased | function(:MouseEvent):Void |
Defines a function to be called when a mouse button
has been released on this |
||||
public | onMouseWheelMoved | function(:MouseEvent):Void |
Defines a function to be called when the mouse scroll wheel has moved. |
||||
public | opacity | Number | 1.0 |
Specifies how opaque (that is, solid) the Specifies how opaque (that is, solid) the A visible node with any opacity setting still receives mouse events and can receive keyboard focus. For example, if you want to have a large invisible rectangle overlay all Nodes in the scene graph in order to intercept mouse events but not be visible to the user, you could create a large Rectangle that had an opacity of 0%. Opacity is specified as a value between 0 and 1. Values less than 0 or greater than one are clipped to 0 and 1 respectively. On some platforms ImageView might not support opacity variable. 1.0Profile: common |
|||
public-read package | parent | Node | null |
The parent of this The parent of this Profile: common |
|||
public-read protected | pressed | Boolean | subclass | subclass | false |
Whether or not the Whether or not the Profile: common |
|
public | rotate | Number | 0.0 |
Defines the angle of rotation about the Defines the angle of rotation about the This rotation factor is not included in layoutBounds by default, which makes it ideal for rotating the entire node after all effects and transforms have been taken into account. The pivot point about which the rotation occurs is the center of the rectangular bounds formed by taking boundsInLocal and applying all the transforms in the transforms[] sequence.
Note that the center of this Profile: common |
|||
public | scaleX | Number | 1.0 |
Defines the factor by which coordinates are scaled about the center of the
object along the X axis of this Defines the factor by which coordinates are scaled about the center of the
object along the X axis of this This scale factor is not included in layoutBounds by default, which makes it ideal for scaling the entire node after all effects and transforms have been taken into account. The pivot point about which the scale occurs is the center of the rectangular bounds formed by taking boundsInLocal and applying all the transforms in the transforms[] sequence. 1.0Profile: common |
|||
public | scaleY | Number | 1.0 |
Defines the factor by which coordinates are scaled about the center of the
object along the Y axis of this Defines the factor by which coordinates are scaled about the center of the
object along the Y axis of this This scale factor is not included in layoutBounds by default, which makes it ideal for scaling the entire node after all effects and transforms have been taken into account. The pivot point about which the scale occurs is the center of the rectangular bounds formed by taking boundsInLocal and applying all the transforms in the transforms[] sequence. 1.0Profile: common |
|||
public-read package | scene | Scene | null |
The Scene that this The Scene that this Profile: common |
|||
public | style | String | empty string |
A string representation of the CSS style associated with this specific Node. A string representation of the CSS style associated with this specific Node. This is exactly analogous to the "style" attribute on an HTML element, but uses the syntax defined in JavaFX CSS. empty stringProfile: desktop |
|||
public | styleClass | String | empty string |
A String identifier which can be used to logically group Nodes, specifically for an external style engine. A String identifier which can be used to logically group Nodes, specifically for an external style engine. This variable is exactly analogous to the styleClass attribute on an HTML element. empty stringProfile: common |
|||
public | transforms | Transform[] | empty |
Defines the sequence of javafx.scene.transform.Transform objects
to be applied to this Defines the sequence of javafx.scene.transform.Transform objects
to be applied to this By default, layoutBounds is defined as the local bounds with all the transforms in this sequence applied. emptyProfile: common |
|||
public | translateX | Number | 0 |
Defines the X coordinate of the translation that is added to the
transformed coordinates of this Defines the X coordinate of the translation that is added to the
transformed coordinates of this For example, if This translation factor is not included in layoutBounds by default, which makes it ideal for moving the entire node around after all effects and transforms are taken into account. 0Profile: common |
|||
public | translateY | Number | 0 |
Defines the Y coordinate of the translation that is added to the
transformed coordinates of this Defines the Y coordinate of the translation that is added to the
transformed coordinates of this For example, if This translation factor is not included in layoutBounds by default, which makes it ideal for moving the entire node around after all effects and transforms are taken into account. 0Profile: common |
|||
public | visible | Boolean | true |
Specifies whether this Specifies whether this Profile: common |
Inherited Variables
Function Summary
- public contains(localX: Number, localY: Number) : Boolean
-
Returns
true
if the given point (specified in the local coordinate space of thisNode
) is contained within the shape of thisNode
.Returns
true
if the given point (specified in the local coordinate space of thisNode
) is contained within the shape of thisNode
. Note that this method does not take visibility into account; the test is based on the geometry of thisNode
only. The default behavior of this function is simply to check if the given coordinates are contained in the local bounds.-
Parameters
- localX
- localY
-
Returns
- Boolean
Profile: common
- public contains(localPoint: Point2D) : Boolean
-
Returns
true
if the given point (specified in the local coordinate space of thisNode
) is contained within the shape of thisNode
.Returns
true
if the given point (specified in the local coordinate space of thisNode
) is contained within the shape of thisNode
. Note that this method does not take visibility into account; the test is based on the geometry of thisNode
only. The default behavior of this function is simply to check if the given coordinates are contained in the local bounds.-
Parameters
- localPoint
-
Returns
- Boolean
Profile: common
- protected abstract impl_createSGNode() : com.sun.scenario.scenegraph.SGNode
- public impl_getFXNode() : com.sun.scenario.scenegraph.fx.FXNode
- public impl_getPivotX() : Number
- public impl_getPivotY() : Number
- protected impl_getSGNode() : com.sun.scenario.scenegraph.SGNode
- protected impl_requestLayout() : Void
-
Set the impl_needsLayout variable of every ancestor of this
Node
.Set the impl_needsLayout variable of every ancestor of this
Node
. If thisNode
is a Group/CustomNode then set its impl_needsLayout variable as well. We short-circuit when we find a node who's impl_needsLayout bit is already set. - public impl_updateFXNodeTransform() : Void
- public intersects(localX: Number, localY: Number, localWidth: Number, localHeight: Number) : Boolean
-
Returns
true
if the given rectangle (specified in the local coordinate space of thisNode
) intersects the shape of thisNode
.Returns
true
if the given rectangle (specified in the local coordinate space of thisNode
) intersects the shape of thisNode
. Note that this method does not take visibility into account; the test is based on the geometry of thisNode
only. The default behavior of this function is simply to check if the given coordinates intersect with the local bounds.-
Parameters
- localX
- localY
- localWidth
- localHeight
-
Returns
- Boolean
Profile: common
- public intersects(localRect: Rectangle2D) : Boolean
-
Returns
true
if the given rectangle (specified in the local coordinate space of thisNode
) intersects the shape of thisNode
.Returns
true
if the given rectangle (specified in the local coordinate space of thisNode
) intersects the shape of thisNode
. Note that this method does not take visibility into account; the test is based on the geometry of thisNode
only. The default behavior of this function is simply to check if the given coordinates intersect with the local bounds.-
Parameters
- localRect
-
Returns
- Boolean
Profile: common
- public localToParent(localX: Number, localY: Number) : Point2D
- public localToParent(localPoint: Point2D) : Point2D
- public localToScene(localX: Number, localY: Number) : Point2D
-
Transforms a point from the local coordinate space of this
Node
into the coordinate space of its javafx.scene.Scene.Transforms a point from the local coordinate space of this
Node
into the coordinate space of its javafx.scene.Scene.-
Parameters
- localX
- localY
-
Returns
- Point2D
Profile: common
- public localToScene(localPoint: Point2D) : Point2D
-
Transforms a point from the local coordinate space of this
Node
into the coordinate space of its javafx.scene.Scene.Transforms a point from the local coordinate space of this
Node
into the coordinate space of its javafx.scene.Scene.-
Parameters
- localPoint
-
Returns
- Point2D
Profile: common
- public lookup(id: java.lang.String) : Node
-
Finds this
Node
, or the first subnode, with the given id.Finds this
Node
, or the first subnode, with the given id. If multiple subnodes have the same id, this function returns one of them. Which node it returns in that case is unspecified.-
Parameters
- id
- The id of the node to find
-
Returns
- Node
-
The first node, starting from this
Node
, which has an id ofid
.
Profile: common
- public parentToLocal(parentX: Number, parentY: Number) : Point2D
- public parentToLocal(parentPoint: Point2D) : Point2D
- public requestFocus() : Void
-
Requests that this
Node
get the input focus, and that thisNode
's top-level ancestor become the focused Window.Requests that this
Node
get the input focus, and that thisNode
's top-level ancestor become the focused Window. If this node is not part of a scene graph rooted in a stage that is visible and can accept input focus, then calls to request focus will not cause thisNode
to become focused.Profile: common
- public sceneToLocal(sceneX: Number, sceneY: Number) : Point2D
- public sceneToLocal(scenePoint: Point2D) : Point2D
-
Transforms a point from the coordinate space of the javafx.scene.Scene into the local coordinate space of this
Node
.Transforms a point from the coordinate space of the javafx.scene.Scene into the local coordinate space of this
Node
.-
Parameters
- scenePoint
-
Returns
- Point2D
Profile: common
- public toBack() : Void
-
Moves this
Node
to the back of its sibling nodes in terms of z-order.Moves this
Node
to the back of its sibling nodes in terms of z-order. This is accomplished by moving thisNode
to the first position in its parent'scontent
sequence. This function has no effect if thisNode
is not part of a group.Profile: common
- public toFront() : Void
-
Moves this
Node
to the front of its sibling nodes in terms of z-order.Moves this
Node
to the front of its sibling nodes in terms of z-order. This is accomplished by moving thisNode
to the last position in its parent'scontent
sequence. This function has no effect if thisNode
is not part of a group.Profile: common
- public toString() : java.lang.String