Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaFXアプリケーションの基本構造を解説!Stage・Scene・Nodesの役割と関係

一般的に、JavaFXアプリケーションは「Stage(ステージ)」「Scene(シーン)」「Nodes(ノード)」という3つの主要コンポーネントで構成されています。以下の図のように、それぞれが階層的に連携することでアプリケーションの画面が実現されます。

JavaFXアプリケーションの基本構造を解説!Stage・Scene・Nodesの役割と関係

Stage(ステージ)とは

Stageはウィンドウそのものを指し、JavaFXアプリケーションのすべてのオブジェクトを格納する最上位のコンテナです。Stageはパッケージjavafx.stageStageクラスによって表現されます。なお、Stageの内容を画面に表示するには、show()メソッドを呼び出す必要があります。

Scene Graph(シーングラフ)とは

シーングラフは、木構造(ツリー構造)に似たデータ構造であり、現代のグラフィカルアプリケーションではノードの集合体として扱われます。JavaFXアプリケーションにおいては、パッケージjavafx.sceneSceneクラスがシーングラフのすべてのコンテンツを保持します。

  • シーンを作成する際には、必ずルートノードを指定する必要があります。

  • 1つのシーンオブジェクトは、1つのステージにのみ追加できます。

Nodes(ノード)とは

ノードとは、JavaFXアプリケーションにおける視覚的・グラフィカルな基本要素のことです。具体的には、以下のようなオブジェクトがノードの例として挙げられます。

  • 2D/3Dの幾何学オブジェクト:円(Circle)、球(Sphere)など

  • UIコントロール:ボタン(Button)、チェックボックス(CheckBox)など

  • コンテナ/レイアウト:BorderPane、GridPaneなど

  • メディア要素:音声、動画、画像などのオブジェクト

親ノード・子ノード・ルートノードの関係

シーングラフ内の各ノードは必ず1つの親を持ちます。そして、親を持たないノードはルートノード(root node)と呼ばれます。同様に、すべてのノードは1つ以上の子を持つことができ、子を持たないノードはリーフノード(leaf node)、子を持つノードはブランチノード(branch node)と分類されます。

JavaFXにおけるルートノードの種類

JavaFXアプリケーションで使用できる主なルートノードには、以下のような種類があります。

  • Group(グループ) − 複数の子ノードをまとめて管理する集合ノードです。グループノードが描画されると、その子ノードも順番にすべて描画されます。また、グループに適用された変換やエフェクトは、すべての子ノードに対しても適用されます。

  • Region(リージョン) − Chart、Pane、Controlなど、JavaFXのNodeベースUIコントロールすべての基底クラスです。

  • WebView(ウェブビュー) − Webエンジンを管理し、そのコンテンツを表示するノードです。

  • Leaf Node(リーフノード) − 子ノードを持たないノードです。Rectangle(矩形)、Ellipse(楕円)、Box(ボックス)、ImageView、MediaViewなどがその例として挙げられます。


  1. JavaFXのシーングラフとは?基本構造とノードの役割を解説

    JavaFXにおけるシーングラフとは JavaFXでは、GUIアプリケーションは「シーングラフ(Scene Graph)」と呼ばれるデータ構造を用いて構築されます。シーングラフは、モダンなグラフィカルアプリケーションで広く採用されている、ツリー構造に似たデータ構造です。アプリケーションの起点となるものであり、複数のノード(Node)の集合体として表現されます。 JavaFXで何かを画面に表示するには、ノードを使ってシーングラフを構築し、それをStageクラスのオブジェクトに設定する必要があります。Stageクラスは、JavaFXアプリケーションにおける最上位のコンテナとして機能します。 ノード

  2. OpenCVとJavaFXで画像の鮮明さを変更するアプリケーションの作成方法

    画像のシャープ化(鮮明化)は、ぼかし処理とは正反対の操作です。OpenCVライブラリを使って画像の鮮明さを変更するには、まずガウシアンフィルタで元画像を平滑化(ぼかし)し、次にその平滑化した画像を元画像から減算します。この処理により、輪郭やディテールが強調され、画像全体がくっきりとした印象になります。 仕組みのポイント 本記事のサンプルでは、Core.addWeighted()メソッドを使って元画像と平滑化画像を加重合成しています。第2引数のalphaは元画像の重み、第4引数のbetaは平滑化画像の重みです。betaを負の値に設定すると、平滑化成分が元画像から差し引かれ、シャープ化効果が得ら