Javafx-application

提供:Dev Guides
移動先:案内検索

JavaFX-アプリケーション

この章では、JavaFXアプリケーションの構造を詳細に説明し、JavaFXアプリケーションの作成例をサンプルで学習します。

JavaFXアプリケーション構造

一般に、JavaFXアプリケーションには、次の図に示すように、 Stage、SceneNodes の3つの主要コンポーネントがあります。

JavaFXアプリケーション構造

ステージ

ステージ(ウィンドウ)には、JavaFXアプリケーションのすべてのオブジェクトが含まれます。 パッケージ javafx.stageStage クラスで表されます。 プライマリステージは、プラットフォーム自体によって作成されます。 作成されたステージオブジェクトは、 Application クラスの* start()*メソッドに引数として渡されます(次のセクションで説明します)。

ステージには、位置を決定する2つのパラメーター、つまり WidthHeight があります。 コンテンツ領域と装飾(タイトルバーと境界線)に分かれています。

利用可能なステージの5種類があります-

  • 装飾された
  • 装飾なし
  • トランスペアレント
  • 統一
  • 実用性

ステージのコンテンツを表示するには、* show()*メソッドを呼び出す必要があります。

シーン

シーンは、JavaFXアプリケーションの物理コンテンツを表します。 シーングラフのすべてのコンテンツが含まれています。 パッケージ javafx.scene のクラス Scene はシーンオブジェクトを表します。 インスタンスでは、シーンオブジェクトは1つのステージにのみ追加されます。

シーンクラスをインスタンス化して、シーンを作成できます。 シーンのサイズ(高さおよび幅)と*ルートノード*をコンストラクターに渡すことで、シーンのサイズを選択できます。

シーングラフとノード

  • シーングラフ*は、シーンの内容を表すツリー状のデータ構造(階層)です。 対照的に、*ノード*はシーングラフの視覚的/グラフィカルオブジェクトです。

ノードには次のものが含まれます-

  • -円、長方形、多角形などの幾何学的(グラフィック)オブジェクト(2Dおよび3D)
  • -ボタン、チェックボックス、選択ボックス、テキスト領域などのUIコントロール
  • 境界ペイン、グリッドペイン、フローペインなどのコンテナ(レイアウトペイン)
  • オーディオ、ビデオ、画像オブジェクトなどのメディア要素。

パッケージ javafx.sceneNode クラスはJavaFXのノードを表し、このクラスはすべてのノードのスーパークラスです。

前に説明したように、ノードには3つのタイプがあります-

  • ルートノード-最初のシーングラフはルートノードとして知られています。
  • 分岐ノード/親ノード-子ノードを持つノードは、分岐/親ノードとして知られています。 パッケージ javafx.sceneParent という抽象クラスは、すべての親ノードの基本クラスであり、それらの親ノードは次のタイプになります-
  • グループ-グループノードは、子ノードのリストを含む集合ノードです。 グループノードがレンダリングされるたびに、そのすべての子ノードが順番にレンダリングされます。 グループに適用される変換、エフェクト状態は、すべての子ノードに適用されます。
  • 地域-これは、チャート、ペイン、コントロールなど、すべてのJavaFX NodeベースのUIコントロールの基本クラスです。
  • WebView -このノードはWebエンジンを管理し、そのコンテンツを表示します。
  • リーフノード-子ノードのないノードはリーフノードと呼ばれます。 たとえば、Rectangle、Ellipse、Box、ImageView、MediaViewはリーフノードの例です。

ルートノードをシーングラフに渡すことは必須です。 グループがルートとして渡されると、すべてのノードがシーンにクリップされ、シーンのサイズを変更してもシーンのレイアウトに影響しません。

JavaFXアプリケーションの作成

JavaFXアプリケーションを作成するには、Applicationクラスをインスタンス化し、その抽象メソッド* start()*を実装する必要があります。 このメソッドでは、JavaFXアプリケーションのコードを記述します。

アプリケーションクラス

パッケージ javafx.applicationApplication クラスは、JavaFXのアプリケーションのエントリポイントです。 JavaFXアプリケーションを作成するには、このクラスを継承し、その抽象メソッド* start()*を実装する必要があります。 このメソッドでは、JavaFXグラフィックスのコード全体を記述する必要があります

*main* メソッドでは、* launch()*メソッドを使用してアプリケーションを起動する必要があります。 このメソッドは、次のプログラムに示すように、Applicationクラスの* start()*メソッドを内部的に呼び出します。
public class JavafxSample extends Application {
   @Override
   public void start(Stage primaryStage) throws Exception {
     /*
      Code for JavaFX application.
      (Stage, scene, scene graph)
     */
   }
   public static void main(String args[]){
      launch(args);
   }
}
  • start()*メソッド内で、典型的なJavaFXアプリケーションを作成するには、以下に示す手順に従う必要があります-
  • 必要なノードを含むシーングラフを準備します。
  • 必要な寸法のシーンを準備し、シーングラフ(シーングラフのルートノード)を追加します。
  • ステージを準備し、シーンをステージに追加して、ステージのコンテンツを表示します。

シーングラフの準備

アプリケーションごとに、必要なノードを含むシーングラフを準備する必要があります。 ルートノードは最初のノードであるため、ルートノードを作成する必要があります。 ルートノードとして、 Group、Region、またはWebView から選択できます。

グループ-グループノードは、パッケージ javafx.scene に属する Group というクラスで表されます。以下に示すように、このクラスをインスタンス化することでグループノードを作成できます。

Group root = new Group();
*Group* クラスの* getChildren()*メソッドは、ノードを保持する *ObservableList* クラスのオブジェクトを提供します。 以下に示すように、このオブジェクトを取得してノードを追加できます。
//Retrieving the observable list object
ObservableList list = root.getChildren();

//Setting the text object as a node
list.add(NodeObject);

以下に示すように、インスタンス化時に Group クラスとそのコンストラクターにノードオブジェクトを渡すだけで、ノードオブジェクトをグループに追加することもできます。

Group root = new Group(NodeObject);

地域-すべてのJavaFX NodeベースのUIコントロールの基本クラスです。

  • グラフ-このクラスはすべてのグラフの基本クラスであり、パッケージ javafx.scene.chart に属します。 +このクラスには、 PieChart および XYChart の2つのサブクラスがあります。 これら2つのサブクラスには、 AreaChart、BarChart、BubbleChart などのサブクラスがあります。 JavaFXでさまざまなタイプのXY平面グラフを描画するために使用されます。 +これらのクラスを使用して、アプリケーションにチャートを埋め込むことができます。
  • Pane -Paneは、 AnchorPane、BorderPane、DialogPane など、すべてのレイアウトペインの基本クラスです。 このクラスは、- javafx.scene.layout と呼ばれるパッケージに属します。 +これらのクラスを使用して、アプリケーションに事前定義されたレイアウトを挿入できます。
  • Control - Accordion、ButtonBar、ChoiceBox、ComboBoxBase、HTMLEditorなどのユーザーインターフェイスコントロールの基本クラスです。 このクラスは、パッケージjavafx.scene.control に属します。 +これらのクラスを使用して、アプリケーションにさまざまなUI要素を挿入できます。

グループでは、次のプログラムに示すように、上記のクラスをインスタンス化し、ルートノードとして使用できます。

//Creating a Stack Pane
StackPane pane = new StackPane();

//Adding text area to the pane
ObservableList list = pane.getChildren();
list.add(NodeObject);
*WebView* -このノードはWebエンジンを管理し、そのコンテンツを表示します。

以下は、JavaFXのノードクラス階層を表す図です。

WebView

シーンの準備

JavaFXシーンは、パッケージ javafx.sceneScene クラスで表されます。 次のタラブロックに示すように、このクラスをインスタンス化することでシーンを作成できます。

インスタンス化中に、ルートオブジェクトをシーンクラスのコンストラクターに渡すことが必須です。

Scene scene = new Scene(root);

以下に示すように、シーンの高さと幅を表すdouble型の2つのパラメーターを渡すこともできます。

Scene scene = new Scene(root, 600, 300);

ステージの準備

これは、JavaFXアプリケーションのコンテナであり、アプリケーションのウィンドウを提供します。 これは、パッケージ javafx.stageStage クラスで表されます。 このクラスのオブジェクトは、 Application クラスの* start()*メソッドのパラメーターとして渡されます。

このオブジェクトを使用すると、ステージでさまざまな操作を実行できます。 主に、次を実行できます-

  • メソッド* setTitle()*を使用して、ステージのタイトルを設定します。
  • * setScene()*メソッドを使用して、シーンオブジェクトをステージにアタッチします。
  • 以下に示すように、* show()*メソッドを使用してシーンのコンテンツを表示します。
//Setting the title to Stage.
primaryStage.setTitle("Sample application");

//Setting the scene to Stage
primaryStage.setScene(scene);

//Displaying the stage
primaryStage.show();

JavaFXアプリケーションのライフサイクル

JavaFX Applicationクラスには3つのライフサイクルメソッドがあります。

  • * start()*-JavaFXグラフィックスコードが書き込まれるエントリポイントメソッド。
  • * stop()*-オーバーライドできる空のメソッド。ここでは、アプリケーションを停止するロジックを記述できます。
  • * init()*-オーバーライドできる空のメソッドですが、このメソッドでステージまたはシーンを作成することはできません。

これらに加えて、JavaFXアプリケーションを起動する* launch()*という静的メソッドを提供します。

  • launch()*メソッドは静的であるため、静的コンテキストから呼び出す必要があります(通常はメイン)。 JavaFXアプリケーションが起動されるたびに、次のアクションが(同じ順序で)実行されます。
  • アプリケーションクラスのインスタンスが作成されます。
  • * Init()*メソッドが呼び出されます。
  • * start()*メソッドが呼び出されます。
  • ランチャーは、アプリケーションが終了するまで待機し、* stop()*メソッドを呼び出します。

JavaFXアプリケーションの終了

アプリケーションの最後のウィンドウが閉じられると、JavaFXアプリケーションは暗黙的に終了します。 ブール値「False」を静的メソッド* setImplicitExit()*(静的コンテキストから呼び出す必要があります)に渡すことで、この動作をオフにできます。

メソッド* Platform.exit()または *System.exit (int)を使用して、JavaFXアプリケーションを明示的に終了できます。

例1 –空のウィンドウを作成する

このセクションでは、空のウィンドウを表示するJavaFXサンプルアプリケーションを作成する方法について説明します。 手順は次のとおりです-

ステップ1:クラスを作成する

Javaクラスを作成し、パッケージ javafx.applicationApplication クラスを継承し、次のようにこのクラスのstart()メソッドを実装します。

public class JavafxSample extends Application {
   @Override
   public void start(Stage primaryStage) throws Exception {
   }
}

ステップ2:グループオブジェクトの作成

  • start()メソッドでは、次のように、パッケージ *javafx.scene に属するGroupというクラスをインスタンス化することにより、グループオブジェクトを作成します。
Group root = new Group();

ステップ3:シーンオブジェクトの作成

パッケージ javafx.scene に属する Scene という名前のクラスをインスタンス化して、シーンを作成します。 このクラスに、前の手順で作成したGroupオブジェクト*(root)*を渡します。

ルートオブジェクトに加えて、画面の高さと幅を表す2つのdoubleパラメーターを、Groupクラスのオブジェクトとともに次のように渡すこともできます。

Scene scene = new Scene(root,600, 300);

ステップ4:ステージのタイトルを設定する

*Stage* クラスの* setTitle()*メソッドを使用して、ステージにタイトルを設定できます。 *primaryStage* は、シーンクラスのstartメソッドにパラメーターとして渡されるStageオブジェクトです。
*primaryStage* オブジェクトを使用して、以下に示すように、シーンのタイトルを *Sample Application* として設定します。
primaryStage.setTitle("Sample Application");

ステップ5:シーンをステージに追加する

*Stage* という名前のクラスの* setScene()*メソッドを使用して、Sceneオブジェクトをステージに追加できます。 以下に示すように、このメソッドを使用して、前の手順で準備したSceneオブジェクトを追加します。
primaryStage.setScene(scene);

ステップ6:ステージのコンテンツを表示する

次のように Stage クラスの* show()*という名前のメソッドを使用して、シーンのコンテンツを表示します。

primaryStage.show();

ステップ7:アプリケーションの起動

次のように、メインメソッドから Application クラスの* launch()*静的メソッドを呼び出して、JavaFXアプリケーションを起動します。

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

次のプログラムは、空のJavaFXウィンドウを生成します。 このコードを JavafxSample.java という名前のファイルに保存します

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class JavafxSample extends Application {
   @Override
   public void start(Stage primaryStage) throws Exception {
     //creating a Group object
      Group group = new Group();

     //Creating a Scene by passing the group object, height and width
      Scene scene = new Scene(group ,600, 300);

     //setting color to the scene
      scene.setFill(Color.BROWN);

     //Setting the title to Stage.
      primaryStage.setTitle("Sample Application");

     //Adding the scene to Stage
      primaryStage.setScene(scene);

     //Displaying the contents of the stage
      primaryStage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します。

javac JavafxSample.java
java JavafxSample

実行時に、上記のプログラムは以下に示すようにJavaFXウィンドウを生成します。

サンプルアプリケーションプレーン

例2 –直線を描く

前の例では、空のステージを作成する方法を見てきました。この例では、JavaFXライブラリを使用して直線を描画してみます。

手順は次のとおりです-

ステップ1:クラスを作成する

Javaクラスを作成し、パッケージ javafx.applicationApplication クラスを継承し、このクラスの* start()*メソッドを次のように実装します。

public class DrawingLine extends Application {
   @Override
   public void start(Stage primaryStage) throws Exception {
   }
}

ステップ2:線の作成

パッケージ javafx.scene.shape に属する Line という名前のクラスをインスタンス化することにより、JavaFXで行を作成できます。このクラスを次のようにインスタンス化します。

//Creating a line object
Line line = new Line();

ステップ3:線にプロパティを設定する

次のコードブロックに示すように、それぞれのセッターメソッドを使用して、プロパティ startX、startY、endX および endY を設定して、X-Y平面に線を描く座標を指定します。

line.setStartX(100.0);
line.setStartY(150.0);
line.setEndX(500.0);
line.setEndY(150.0);

ステップ4:グループオブジェクトの作成

start()メソッドで、パッケージjavafx.sceneに属するGroupというクラスをインスタンス化することにより、グループオブジェクトを作成します。

次のようにグループに追加するために、前のステップで作成されたLine(ノード)オブジェクトを、Groupクラスのコンストラクターへのパラメーターとして渡します-

Group root = new Group(line);

ステップ5:シーンオブジェクトの作成

パッケージ javafx.scene に属する Scene という名前のクラスをインスタンス化して、シーンを作成します。 このクラスに、前の手順で作成されたGroupオブジェクト*(root)*を渡します。

ルートオブジェクトに加えて、画面の高さと幅を表す2つのdoubleパラメーターを、Groupクラスのオブジェクトとともに次のように渡すこともできます。

Scene scene = new Scene(group ,600, 300);

ステップ6:ステージのタイトルを設定する

*Stage* クラスの* setTitle()*メソッドを使用して、ステージにタイトルを設定できます。 *primaryStage* は、シーンクラスのstartメソッドにパラメーターとして渡されるStageオブジェクトです。
*primaryStage* オブジェクトを使用して、シーンのタイトルを次のように *Sample Application* として設定します。
primaryStage.setTitle("Sample Application");

ステップ7:シーンをステージに追加する

*Stage* という名前のクラスの* setScene()*メソッドを使用して、Sceneオブジェクトをステージに追加できます。 この方法を使用して、前の手順で準備したSceneオブジェクトを次のように追加します。
primaryStage.setScene(scene);

ステップ8:ステージのコンテンツを表示する

次のように Stage クラスの* show()*という名前のメソッドを使用して、シーンのコンテンツを表示します。

primaryStage.show();

ステップ9:アプリケーションの起動

次のように、メインメソッドから Application クラスの* launch()*静的メソッドを呼び出して、JavaFXアプリケーションを起動します。

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

次のプログラムは、JavaFXを使用して直線を生成する方法を示しています。 このコードを JavafxSample.java という名前のファイルに保存します。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.Line;
import javafx.stage.Stage;

public class DrawingLine extends Application{
   @Override
   public void start(Stage stage) {
     //Creating a line object
      Line line = new Line();

     //Setting the properties to a line
      line.setStartX(100.0);
      line.setStartY(150.0);
      line.setEndX(500.0);
      line.setEndY(150.0);

     //Creating a Group
      Group root = new Group(line);

     //Creating a Scene
      Scene scene = new Scene(root, 600, 300);

     //Setting title to the scene
      stage.setTitle("Sample application");

     //Adding the scene to the stage
      stage.setScene(scene);

     //Displaying the contents of a scene
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します。

javac DrawingLine.java
java DrawingLine

実行すると、上記のプログラムは、以下に示すような直線を表示するJavaFXウィンドウを生成します。

線の描画

例3 –テキストの表示

JavaFXシーンにテキストを埋め込むこともできます。 この例は、JavaFXにテキストを埋め込む方法を示しています。

手順は次のとおりです-

ステップ1:クラスを作成する

Javaクラスを作成し、パッケージ javafx.applicationApplication クラスを継承し、このクラスの* start()*メソッドを次のように実装します。

public class DrawingLine extends Application {
   @Override
   public void start(Stage primaryStage) throws Exception {
   }
}

ステップ2:テキストを埋め込む

パッケージ javafx.scene.shape に属する Text というクラスをインスタンス化して、このクラスをインスタンス化することにより、JavaFXシーンにテキストを埋め込むことができます。

埋め込みテキストを文字列形式で渡すことにより、このクラスをインスタンス化できます。または、以下に示すように、デフォルトのコンストラクターを使用してテキストオブジェクトを作成できます。

//Creating a Text object
Text text = new Text();

ステップ3:フォントの設定

*Text* クラスの* setFont()*メソッドを使用して、テキストにフォントを設定できます。 このメソッドは、パラメータとしてフォントオブジェクトを受け入れます。 以下に示すように、指定されたテキストのフォントを45に設定します。
//Setting font to the text
text.setFont(new Font(45));

ステップ4:テキストの位置を設定する

次のようにそれぞれのsetterメソッド* setX()および setY()*を使用してX、Y座標を設定することにより、X-Y平面上のテキストの位置を設定できます。

//setting the position of the text
text.setX(50);
text.setY(150);

ステップ5:追加するテキストの設定

TextクラスのsetText()メソッドを使用して、追加するテキストを設定できます。 このメソッドは、追加するテキストを表す文字列パラメーターを受け入れます。

text.setText("Welcome to finddevguides");

ステップ6:グループオブジェクトの作成

  • start()メソッドで、パッケージ *javafx.scene に属するGroupという名前のクラスをインスタンス化して、グループオブジェクトを作成します。

次のようにグループに追加するために、前の手順で作成されたテキスト(ノード)オブジェクトをパラメータとしてGroupクラスのコンストラクタに渡します-

Group root = new Group(text)

ステップ7:シーンオブジェクトの作成

パッケージ javafx.scene に属する Scene という名前のクラスをインスタンス化して、シーンを作成します。 このクラスに、前の手順で作成したGroupオブジェクト*(root)*を渡します。

ルートオブジェクトに加えて、画面の高さと幅を表す2つのdoubleパラメーターを、Groupクラスのオブジェクトとともに次のように渡すこともできます。

Scene scene = new Scene(group ,600, 300);

ステップ8:ステージのタイトルを設定する

*Stage* クラスの* setTitle()*メソッドを使用して、ステージにタイトルを設定できます。 *primaryStage* は、シーンクラスのstartメソッドにパラメーターとして渡されるStageオブジェクトです。
*primaryStage* オブジェクトを使用して、以下に示すように、シーンのタイトルを *Sample Application* として設定します。
primaryStage.setTitle("Sample Application");

ステップ9:ステージにシーンを追加する

*Stage* という名前のクラスの* setScene()*メソッドを使用して、Sceneオブジェクトをステージに追加できます。 この方法を使用して、前の手順で準備したSceneオブジェクトを次のように追加します。
primaryStage.setScene(scene);

ステップ10:ステージのコンテンツを表示する

次のように Stage クラスの* show()*という名前のメソッドを使用して、シーンのコンテンツを表示します。

primaryStage.show();

ステップ11:アプリケーションの起動

次のように、メインメソッドから Application クラスの* launch()*静的メソッドを呼び出して、JavaFXアプリケーションを起動します。

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

以下は、JavaFXを使用してテキストを表示するプログラムです。 このコードを DisplayingText.java という名前のファイルに保存します。

import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.Text;

public class DisplayingText extends Application {
   @Override
   public void start(Stage stage) {
     //Creating a Text object
      Text text = new Text();

     //Setting font to the text
      text.setFont(new Font(45));

     //setting the position of the text
      text.setX(50);
      text.setY(150);

     //Setting the text to be added.
      text.setText("Welcome to finddevguides");

     //Creating a Group object
      Group root = new Group();

     //Retrieving the observable list object
      ObservableList list = root.getChildren();

     //Setting the text object as a node to the group object
      list.add(text);

     //Creating a scene object
      Scene scene = new Scene(root, 600, 300);

     //Setting title to the Stage
      stage.setTitle("Sample Application");

     //Adding scene to the stage
      stage.setScene(scene);

     //Displaying the contents of the stage
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します。

javac DisplayingText.java
java DisplayingText

実行すると、上記のプログラムは、次のようにテキストを表示するJavaFXウィンドウを生成します。

テキストを表示するJavaFXウィンドウ