モジュール javafx.graphics

パッケージjavafx.scene

JavaFXシーン・グラフAPIのベース・クラスのコア・セットを提供します。 シーングラフはツリー形式のデータ構造です。ツリー内の各アイテムは0または1個の親および0個以上の子を持ちます。

このパッケージには次の2つのプライマリ・クラスがあります。

  • Scene - レンダリング対象のシーンを定義します。 これには、シーンの背景を指定するfill変数、シーンのサイズを指定するwidthおよびheight変数、シーン上にレンダリングされるルートNodesのリストを示すcontentシーケンスが含まれています。 このようなNodesのシーケンスがこのSceneのシーングラフになります。 Sceneは、JavaFXコンテンツのトップレベル・コンテナであるStage上にレンダリングされます。
  • Node - シーングラフ内のすべてのノードの抽象ベース・クラスです。 各ノードは、子ノードを持たないリーフ・ノードか、0個以上の子ノードを持つブランチ・ノードのいずれかになります。 ツリー内の各ノードは0または1個の親を持ちます。 シーングラフの各ツリー内には、親のないノードが1個のみあり、一般的にルート・ノードと呼ばれます。 シーングラフには複数のツリーが存在する場合があります。 それらのツリーの中には、Sceneの一部となっているために、表示できるものもあります。 その一方で、どのSceneにも含まれないツリーもあります。

ブランチ・ノードは、Parentタイプか、またはそのサブクラスになります。

リーフ・ノードは、RectangleTextImageViewMediaViewなどのクラスか、または子を持たないその他のリーフ・クラスになります。

ノードはシーングラフ内のどの場所においても最大で1回しか出現できません。 具体的には、Parentの子リスト内に、またはNodeのクリップとしてノードが出現できるのは1回までです。 これらの制限の詳細は、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 Sceneのビジュアル・レンダリングの例

座標系および変換

Nodeクラスは、従来のコンピュータ・グラフィックスのローカル座標系を定義します。この座標系では、x軸が右方向に増え、y軸が下方向に増えていきます。 図形の具象ノード・クラスには、このローカル座標空間内での図形のジオメトリと位置を定義するための変数が用意されています。 たとえば、Rectangleにはxywidthおよびheight変数があり、CircleにはcenterXcenterYおよびradiusがあります。

あらゆるNodeに変換を適用できます。 変換には、平行移動、回転、スケーリングまたはシャーリングがあります。 変換によって、変換されるノードの親から見た、座標系の位置、向きまたはサイズが変化します。

変換の詳細は、Nodeクラスを参照してください。

境界矩形

すべてのNodeが変換に対応しているため、各ノードのジオメトリ境界矩形の表現を変換の適用有無に応じて変えることができます。

Nodeでは、次のプロパティによってこれらの境界矩形を指定します。

  • boundsInLocal - 未変換ローカル座標におけるNodeの境界を指定します。
  • boundsInParent - すべての変換を適用した後のNodeの境界を指定します。 これがboundsInParentと呼ばれるのは、矩形が親の座標系に対して相対的になるためです。
  • layoutBounds - レイアウト計算の基礎として使用される、Nodeの矩形境界を指定します。この境界はノードの視覚境界とは異なる場合があります。 図形、テキストおよびImageViewの場合、デフォルトのlayoutBoundsには図形のジオメトリのみが含まれます。

境界矩形の詳細は、Nodeクラスを参照してください。

CSS

JavaFXシーン・グラフは、CSS (カスケード・スタイル・シート)を使用してノードのスタイルを設定する機能を提供します。 Nodeクラスには、CSSセレクタによってスタイルの適用先ノードの検索に使用されるidstyleClassおよびstyle変数が含まれています。 Sceneクラスには、シーン内のノードに適用されるCSSスタイルシートを参照する一連のURLを指定するstylesheets変数が含まれています。

CSSの詳細、ノードへのCSSスタイルの適用方法およびスタイル設定に使用可能なプロパティは、CSSリファレンス・ガイドを参照してください。