Module  javafx.graphics

Package javafx.scene

为JavaFX Scene Graph API提供核心的基类集。 场景图是一个树形数据结构,其中树中的每个项目都有零个或一个父项和零个或多个子节点。

这个包中的两个主要类别是:

  • Scene “定义要呈现的场景。 它包含一个fill变量,指定场景,背景widthheight变量指定场景的大小,和一个content包含的“根”的列表序列Nodes将被渲染到场景上。 Nodes这个序列是这个Scene的场景图。 A Scene呈现在Stage ,它是JavaFX内容的顶级容器。
  • Node -场景图中所有节点的抽象基类。 每个节点是没有子节点的“叶”节点或具有零个或多个子节点的“分支”节点。 树中的每个节点都有零个或一个父节点。 场景图中每个树中只有一个节点将没有父节点,这通常被称为“根”节点。 场景图中可能有几棵树。 一些树可能是Scene一部分,在这种情况下,它们有资格被显示。 其他树木可能不属于任何Scene一部分。

分支节点类型为Parent或其子类。

叶节点是类如RectangleTextImageViewMediaView ,或不能生育其它这种叶类。

场景图中的任何地方最多可能出现节点。 具体而言,节点必须出现不超过一次在子女名单Parent或作为的剪辑Node 有关这些限制的更多细节,请参阅Node课程。

JavaFX场景图的示例如下所示:

  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);
        scene.setFill(Color.LIGHTGRAY);

        Circle circle = new Circle(60, 40, 30, Color.GREEN);
        
        Text text = new Text(10, 90, "JavaFX Scene");
        text.setFill(Color.DARKRED);
        
        Font font = new Font(20);
        text.setFont(font);
        
        root.getChildren().add(circle);
        root.getChildren().add(text);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        Application.launch(args);
    }
} 

以上示例将生成以下图像:

JavaFX场景示例的可视化渲染

坐标系和转换

Node类定义了传统的计算机图形“局部”坐标系,其中x轴向右增加, y轴向下增加。 形状的具体节点类提供了用于定义该局部坐标空间内形状和位置的变量。 例如, Rectangle提供xywidthheight变量而Circle提供centerXcenterY ,和radius

任何Node都可以对其进行转换。 这些包括平移,旋转,缩放或剪切变换。 转换将改变坐标系的位置,方向或大小,从已经被转换的节点的父节点看。

有关转换的更多信息,请参阅Node类。

边界矩形

由于每个Node都有变换,所以每个节点的几何边界矩形可以根据转换是否被考虑而不同地描述。

每个Node具有以下属性,指定这些边界矩形:

  • boundsInLocal “指定未转换的局部坐标中的Node的边界。
  • boundsInParent “指定了所有转换之后的Node的边界。 它被称为“boundsInParent”,因为矩形将相对于父协调系统。
  • layoutBounds “指定应用作布局计算基础的Node的矩形边界,并且可能与节点的可视边界不同。 对于shape,Text和ImageView,默认的layoutBounds仅包括形状几何。

有关边界矩形的更多信息,请参阅Node类。

CSS

JavaFX Scene Graph提供了使用CSS(级联样式表)对节点进行风格化的功能。 Node类包含idstyleClass ,并style变量由CSS选择器用于查找样式应该应用节点。 Scene类包含stylesheets变量,它是引用要应用于该场景中的节点的CSS样式表的URL序列。

有关CSS的更多信息,如何将CSS样式应用于节点,以及可用于样式的属性,请参阅CSS Reference Guide