- はじめに
- Node クラス階層
- javafx.scene.Node
- javafx.scene.Parent
- javafx.scene.layout.Region
- javafx.scene.layout.Pane
- javafx.scene.control.Control
- javafx.scene.Group
- javafx.scene.shape.Shape
はじめに
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.layout.Pane : レイアウト・ペインのベース・クラス(外部から子を追加/削除可能)
- javafx.scene.Group:適用されたすべての変換、効果または状態をすべての子に適用
- javafx.scene.layout.Region : すべてのレイアウト・コンテナのベース・クラス
- javafx.scene.shape.Shape : なんらかの形式の幾何学的な形状
- Text, Rectangle など
- javafx.scene.Parent : 子を持つすべてのノードのベース・クラス
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
のサブクラスとして、AnchorPane
、BorderPane
、DialogPane
、FlowPane
、GridPane
、HBox
、PopupControl.CSSBridge
、StackPane
、TextFlow
、TilePane
、VBox
などがある。
javafx.scene.control.Control
すべてのユーザー・インタフェース・コントロールのベース・クラスで、ユーザーが操作できるシーングラフのノード。
ContextMenu、Tooltip、Skin を持つ。 Skin によりその外観をカスタマイズすると同時に、コントロールの機能を容易に利用できるようにする。
ほとんどのコントロールではデフォルトで focusTraversable
が true
に設定されているため、タブキーなどのフォーカス・トラバーサル・キーにてコントロールがフォーカスを得ることができる(Label
ProgressIndicator
などの読取り専用コントロール、ScrollPane
や ToolBar
などコンテナとなる一部のコントロールを除く)。
javafx.scene.control.Control
のサブクラスとして、Accordion
、ButtonBar
、ChoiceBox
、ComboBoxBase
、HTMLEditor
、Labeled
、ListView
、MenuBar
、Pagination
、ProgressIndicator
、ScrollBar
、ScrollPane
、Separator
、Slider
、Spinner
、SplitPane
、TableView
、TabPane
、TextInputControl
、ToolBar
、TreeTableView
、TreeView
などがある。
javafx.scene.Group
子ノードをグルーピングし、変換、効果または状態を、そのグループのすべての子に適用する(このノードがレンダリングされるたびに順番にレンダリングされる子の ObservableList を持つ)。 グループは、その子の集合の境界となり、直接サイズを変更することはできない。
変換および効果はこのグループのレイアウト境界には含まないが、このグループの子に変換および効果が直接設定されている場合、それらはこのグループのレイアウト境界に含まれる。
デフォルトでは、レイアウト・パス中に、グループによって管理されているサイズ変更可能な子が優先サイズに自動的にサイズ変更される。
この自動サイズ設定を無効にするには autoSizeChildren
を false
に設定する(子の優先サイズが変更された場合に、子が自動的にサイズ変更されなくなるため慎重に使用すること)。
javafx.scene.shape.Shape
なんらかの形式の幾何学的な形状を表すオブジェクトの共通プロパティの定義を提供する。
fill
図形の塗りつぶしに適用されるPaint
stroke
図形の輪郭のストロークに適用されるPaint
strokeWidth
ボーダー・ストロークの幅strokeType
ボーダーが、図形の外部余白として描画されるか、ボーダーの内部に沿った内側のエッジとして描画されるかなどのStrokeType
strokeLineJoin
strokeLineCap
パス・セグメント間の結合および閉じていないパスの終端の装飾スタイルstrokeDashOffset
破線の属性