JavaFx の Node クラス階層


はじめに

JavaFx では javafx.scene.Node で表される木構造でGUI要素を表現し、この構造をシーン・グラフと呼ぶ。

シーン・グラフ は、そのコンテナとなる Scene に登録し、Scene を通して Stage(Window) に描画する という形になる。

ここでは、シーン・グラフ を構成する javafx.scene.Node のクラス階層を概略する。


Node クラス階層

  • javafx.scene.Node
    • javafx.scene.Parent : 子を持つすべてのノードのベース・クラス
      • javafx.scene.layout.Region : すべてのレイアウト・コンテナのベース・クラス
        • javafx.scene.layout.Pane : レイアウト・ペインのベース・クラス(外部から子を追加/削除可能)
          • BorderPane、StackPane、VBox など
        • javafx.scene.control.Control : ユーザー・インタフェース・コントロールのベース・クラス
          • Button, Label, SplitPane など
      • javafx.scene.Group:適用されたすべての変換、効果または状態をすべての子に適用
    • javafx.scene.shape.Shape : なんらかの形式の幾何学的な形状
      • Text, Rectangle など


javafx.scene.Node

シーングラフ・ノードのベース・クラス。 シーングラフとは、一連のツリー・データ構造を指します。この構造では、すべてのアイテムが0または1個の親を持ち、各アイテムはサブアイテムを持たないリーフか、0個以上のサブアイテムを持つブランチのいずれかになる。

あらゆるNodeに変換を適用できる。これには、平行移動、回転、スケーリングまたはシャーリングがある。


javafx.scene.Parent

シーングラフ内で子を持つすべてのノードのベース・クラス。 このクラスは、子ノードの追加/削除、レイアウトおよびレンダリングに対してダーティであるブランチのマーキング、ピッキング、境界の計算および各パルスのレイアウト・パスの実行など、すべての階層シーングラフ操作を扱う。

Parentには、2つの直接具象クラスがある。 * Region:CSSとレイアウトの子でスタイルを指定できるノード * Group:効果と変換が子ノードのコレクションに適用される


javafx.scene.layout.Region

すべてのJavaFXノードベースUIコントロールおよびすべてのレイアウト・コンテナのベース・クラスで、CSSとレイアウトの子でスタイルを指定できるノード。

デフォルトでは、Regionはスーパー・クラスParentのレイアウト動作を継承する(サイズ変更可能な子ノードをそれぞれの優先サイズに合せてサイズ変更するが、それらの再配置は行わない)(リージョンのサイズを明示的に制御する必要があるアプリケーションでは、minHeight、prefHeightおよびmaxHeightプロパティを設定して優先サイズ範囲をオーバーライドする必要がある)。

具体的なレイアウト動作を必要とするアプリケーションでは、Regionのサブクラス(StackPane、HBox、VBox、TilePane、FlowPane、BorderPane、GridPaneまたはAnchorPane)のいずれかを使用する。

カスタムなレイアウトを実装するには、RegionサブクラスでcomputePrefWidth、computePrefHeightおよびlayoutChildrenをオーバーライドする必要がある。layoutChildrenは、上から下へのレイアウト・パスを実行するときにシーングラフによって自動的に呼び出されるため、Regionサブクラスから直接呼び出さないようにする。


javafx.scene.layout.Pane

サブクラスのユーザーが子を自由に追加/削除できるようにパブリックとして子を公開するレイアウト・ペインのベース・クラス。

子の絶対配置が必要となる場合に直接使用できる(サイズ変更可能な子を優先サイズに合せてサイズ変更する以外のレイアウトは実行しない)。 ペインによるレイアウト中に子の位置は変更されないため、その配置はアプリケーションで行う。

javafx.scene.layout.Pane のサブクラスとして、AnchorPaneBorderPaneDialogPaneFlowPaneGridPaneHBoxPopupControl.CSSBridgeStackPaneTextFlowTilePaneVBox などがある。


javafx.scene.control.Control

すべてのユーザー・インタフェース・コントロールのベース・クラスで、ユーザーが操作できるシーングラフのノード。

ContextMenu、Tooltip、Skin を持つ。 Skin によりその外観をカスタマイズすると同時に、コントロールの機能を容易に利用できるようにする。

ほとんどのコントロールではデフォルトで focusTraversabletrue に設定されているため、タブキーなどのフォーカス・トラバーサル・キーにてコントロールがフォーカスを得ることができる(Label ProgressIndicatorなどの読取り専用コントロール、ScrollPaneToolBar などコンテナとなる一部のコントロールを除く)。

javafx.scene.control.Control のサブクラスとして、AccordionButtonBarChoiceBoxComboBoxBaseHTMLEditorLabeledListViewMenuBarPaginationProgressIndicatorScrollBarScrollPaneSeparatorSliderSpinnerSplitPaneTableViewTabPaneTextInputControlToolBarTreeTableViewTreeView などがある。


javafx.scene.Group

子ノードをグルーピングし、変換、効果または状態を、そのグループのすべての子に適用する(このノードがレンダリングされるたびに順番にレンダリングされる子の ObservableList を持つ)。 グループは、その子の集合の境界となり、直接サイズを変更することはできない。

変換および効果はこのグループのレイアウト境界には含まないが、このグループの子に変換および効果が直接設定されている場合、それらはこのグループのレイアウト境界に含まれる。

デフォルトでは、レイアウト・パス中に、グループによって管理されているサイズ変更可能な子が優先サイズに自動的にサイズ変更される。 この自動サイズ設定を無効にするには autoSizeChildrenfalse に設定する(子の優先サイズが変更された場合に、子が自動的にサイズ変更されなくなるため慎重に使用すること)。


javafx.scene.shape.Shape

なんらかの形式の幾何学的な形状を表すオブジェクトの共通プロパティの定義を提供する。

  • fill 図形の塗りつぶしに適用される Paint
  • stroke 図形の輪郭のストロークに適用される Paint
  • strokeWidth ボーダー・ストロークの幅
  • strokeType ボーダーが、図形の外部余白として描画されるか、ボーダーの内部に沿った内側のエッジとして描画されるかなどの StrokeType
  • strokeLineJoin strokeLineCap パス・セグメント間の結合および閉じていないパスの終端の装飾スタイル
  • strokeDashOffset 破線の属性