Package javafx.scene

Provides the core set of base classes for the JavaFX Scene Graph API. A scene graph is a tree-like data structure, where each item in the tree has zero or one parent and zero or more children.

The two primary classes in this package are:

  • Scene – Defines the scene to be rendered. It contains a fill variable that specifies the background of the scene, width and height variables that specify the size of the scene, and a content sequence that contains a list of "root" Nodes to be rendered onto the scene. This sequence of Nodes is the scene graph for this Scene. A Scene is rendered onto a Stage, which is the top-level container for JavaFX content.
  • Node – Abstract base class for all nodes in the scene graph. Each node is either a "leaf" node with no child nodes or a "branch" node with zero or more child nodes. Each node in the tree has zero or one parent. Only a single node within each tree in the scene graph will have no parent, which is often referred to as the "root" node. There may be several trees in the scene graph. Some trees may be part of a Scene, in which case they are eligible to be displayed. Other trees might not be part of any Scene.

Branch nodes are of type Parent or subclasses thereof.

Leaf nodes are classes such as Rectangle, Text, ImageView, MediaView, or other such leaf classes which cannot have children.

A node may occur at most once anywhere in the scene graph. Specifically, a node must appear no more than once in the children list of a Parent or as the clip of a Node. See the Node class for more details on these restrictions.


An example JavaFX scene graph is as follows:

package example;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Group;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.text.Text;
import javafx.scene.text.Font;

public class Example extends Application {

    @Override public void start(Stage stage) {
        Group root = new Group();
        Scene scene = new Scene(root, 200, 150);

        Circle circle = new Circle(60, 40, 30, Color.GREEN);
        Text text = new Text(10, 90, "JavaFX Scene");
        Font font = new Font(20);

    public static void main(String[] args) {

The above example will generate the following image:

A visual rendering of the JavaFX Scene example

Coordinate System and Transformations

The Node 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 defining the geometry and location of the shape within this local coordinate space. For example, Rectangle provides x, y, width, height variables while Circle provides centerX, centerY, and radius.

Any Node can have transformations applied to it. These include translation, rotation, scaling, or shearing transformations. A transformation will change the position, orientation, or size of the coordinate system as viewed from the parent of the node that has been transformed.

See the Node class for more information on transformations.

Bounding Rectangle

Since every Node has transformations, every Node's geometric bounding rectangle can be described differently depending on whether transformations are accounted for or not.

Each Node has the following properties which specifies these bounding rectangles:

  • boundsInLocal – specifies the bounds of the Node in untransformed local coordinates.
  • boundsInParent – specifies the bounds of the Node after all transformations have been applied. It is called "boundsInParent" because the rectangle will be relative to the parent's coordinate system.
  • layoutBounds – specifies the rectangular bounds of the Node that should be used as the basis for layout calculations, and may differ from the visual bounds of the node. For shapes, Text, and ImageView, the default layoutBounds includes only the shape geometry.

See the Node class for more information on bounding rectangles.


The JavaFX Scene Graph provides the facility to style nodes using CSS (Cascading Style Sheets). The Node class contains id, styleClass, and style variables are used by CSS selectors to find nodes to which styles should be applied. The Scene class contains the stylesheets variable which is a sequence of URLs that reference CSS style sheets that are to be applied to the nodes within that scene.

For further information about CSS, how to apply CSS styles to nodes, and what properties are available for styling, see the CSS Reference Guide.