Javafx-quick-guide

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

JavaFX-概要

  • リッチインターネットアプリケーション*は、デスクトップアプリケーションと同様の機能とエクスペリエンスを提供するWebアプリケーションです。 これらは、ユーザーに通常のWebアプリケーションと比較した場合、より優れた視覚体験を提供します。 これらのアプリケーションは、ブラウザのプラグインまたは仮想マシンとして提供され、従来の静的アプリケーションをより強化された、流動的でアニメーション化された魅力的なアプリケーションに変換するために使用されます。

従来のデスクトップアプリケーションとは異なり、RIAは実行するために追加のソフトウェアを必要としません。 別の方法として、アプリケーションに応じてActiveX、Java、Flashなどのソフトウェアをインストールする必要があります。

RIAでは、リッチグラフィックスをサポートするプラグインがあるため、グラフィカルプレゼンテーションはクライアント側で処理されます。 簡単に言えば、RIAでのデータ操作はサーバー側で実行され、関連するオブジェクト操作はクライアント側で実行されます。

RIAを開発できる3つの主要な技術があります。 これらには以下が含まれます-

  • アドビフラッシュ
  • マイクロソフトシルバーライト
  • JavaFX

アドビフラッシュ

このソフトウェアプラットフォームは、アドビシステムズによって開発され、リッチインターネットアプリケーションの作成に使用されます。 これらに加えて、ベクター、アニメーション、ブラウザゲーム、デスクトップアプリケーション、モバイルアプリケーション、ゲームなど、他のアプリケーションを構築することもできます。

これは、デスクトップブラウザの普及率が96%のRIAを開発および実行するために最も一般的に使用されるプラットフォームです。

マイクロソフトシルバーライト

Adobe Flashと同様に、Microsoft Silverlightもリッチインターネットアプリケーションを開発および実行するためのソフトウェアアプリケーションフレームワークです。 当初、このフレームワークはストリーミングメディアに使用されていました。 現在のバージョンは、マルチメディア、グラフィックス、およびアニメーションもサポートしています。

このプラットフォームは、デスクトップブラウザーの普及率66%で使用されることはほとんどありません。

JavaFX

JavaFXは、リッチインターネットアプリケーションを開発できるJavaライブラリです。 Javaテクノロジーを使用することにより、これらのアプリケーションのブラウザー普及率は76%です。

JavaFXとは何ですか?

JavaFXは、リッチインターネットアプリケーションの構築に使用されるJavaライブラリです。 このライブラリを使用して記述されたアプリケーションは、複数のプラットフォームで一貫して実行できます。 JavaFXを使用して開発されたアプリケーションは、デスクトップコンピューター、携帯電話、テレビ、タブレットなどのさまざまなデバイスで実行できます。

Javaプログラミング言語を使用して* GUIアプリケーション*を開発するために、プログラマは Advanced Windowing ToolkitSwing などのライブラリに依存しています。 JavaFXの登場後、これらのJavaプログラマーはリッチコンテンツを使用してGUIアプリケーションを効果的に開発できるようになりました。

JavaFXの必要性

豊富な機能を備えた*クライアントサイドアプリケーション*を開発するために、プログラマはさまざまなライブラリに依存して、メディア、UIコントロール、Web、2D、3Dなどの機能を追加していました。 JavaFXには、これらすべての機能が1つのライブラリに含まれています。 これらに加えて、開発者は Swing などのJavaライブラリの既存の機能にアクセスすることもできます。

JavaFXは、豊富なグラフィックスとメディアAPIのセットを提供し、ハードウェアアクセラレーショングラフィックスを通じて最新の Graphical Processing Unit を活用します。 JavaFXは、開発者がグラフィックアニメーションとUIコントロールを組み合わせるためのインターフェイスも提供します。

JavaFXは、Java、Groovy、JRubyなどのJVMベースのテクノロジーで使用できます。 開発者がJavaFXを選択する場合、上記の技術のいずれかの予備知識がJavaFXを使用してRIAを開発するのに十分であるため、追加の技術を学ぶ必要はありません。

JavaFXの機能

以下は、JavaFXの重要な機能の一部です-

  • * Javaで記述*-JavaFXライブラリはJavaで記述されており、 Java、Groovy、JRuby など、JVMで実行できる言語で使用できます。 これらのJavaFXアプリケーションもプラットフォームに依存しません。
  • FXML -JavaFXは、宣言型マークアップ言語のようなHTMLであるFXMLとして知られる言語を特徴としています。 この言語の唯一の目的は、ユーザーインターフェイスを定義することです。
  • Scene Builder -JavaFXはScene Builderという名前のアプリケーションを提供します。 このアプリケーションをEclipseやNetBeansなどのIDEに統合すると、ユーザーはドラッグアンドドロップデザインインターフェイスにアクセスでき、FXMLアプリケーションの開発に使用できます(Swing Drag&DropやDreamWeaver Applicationsと同様)。
  • * Swing相互運用性*-JavaFXアプリケーションでは、 Swing Node クラスを使用してSwingコンテンツを埋め込むことができます。 同様に、既存のSwingアプリケーションを、埋め込みWebコンテンツやリッチグラフィックメディアなどのJavaFX機能で更新できます。
  • ビルトインUIコントロール-JavaFXライブラリは、フル機能のアプリケーションを開発できるUIコントロールを提供します。
  • *スタイリングのようなCSS *-JavaFXはスタイリングのようなCSSを提供します。 これを使用することにより、CSSの簡単な知識でアプリケーションの設計を改善できます。
  • キャンバスおよび印刷API *-JavaFXは、レンダリングモードの即時モードスタイルであるCanvasを提供します。 パッケージ *javafx.scene.canvas 内には、キャンバスのクラスのセットが含まれており、これを使用してJavaFXシーンの領域内に直接描画できます。 JavaFXは、パッケージ javafx.print で印刷用のクラスも提供します。
  • 豊富なAPIセット-JavaFXライブラリは、GUIアプリケーション、2Dおよび3Dグラフィックスなどを開発するための豊富なAPIセットを提供します。 このAPIのセットには、Javaプラットフォームの機能も含まれています。 したがって、このAPIを使用して、Generics、Annotations、Multithreading、Lambda ExpressionsなどのJava言語の機能にアクセスできます。 従来のJavaコレクションライブラリが強化され、監視可能なリストやマップなどの概念が含まれていました。 これらを使用して、ユーザーはデータモデルの変更を観察できます。
  • 統合グラフィックスライブラリ-JavaFXは 2d および 3d グラフィックスのクラスを提供します。
  • グラフィックスパイプライン-JavaFXは、Prismとして知られるハードウェアアクセラレーショングラフィックスパイプラインに基づいたグラフィックスをサポートします。 サポートされているグラフィックカードまたはGPUで使用すると、スムーズなグラフィックを提供します。 システムがグラフィックカードをサポートしていない場合、プリズムはデフォルトでソフトウェアレンダリングスタックになります。

JavaFXの歴史

JavaFXは、もともと Chris OliverSee Beyond Technology Corporation という会社で働いていたときに開発したもので、2005年に Sun Microsystems に買収されました。

次のポイントは、このプロジェクトの詳細情報を提供します-

 *当初、このプロジェクトはF3* (Form Follows Functions)*と名付けられ、GUIアプリケーションを開発するための豊富なインターフェイスを提供することを目的として開発されました。
* *Sun Microsystems* は2005年6月にSee Beyond社を買収し、F3プロジェクトを *JavaFX* として採用しました。
* 2007年、JavaFXは *Java One* (毎年開催される世界規模のWeb会議)で公式に発表されました。
* 2008年には、JavaFXと統合された *Net Beans* が利用可能になりました。 同じ年に、JavaFX 1.0用のJava *Standard Development Kit* がリリースされました。
* 2009年、Oracle CorporationはSun Microsystemsを買収し、同じ年にJavaFXの次のバージョン(1.2)もリリースされました。
* 2010年にJavaFX 1.3がリリースされ、2011年にJavaFX 2.0がリリースされました。
* 最新バージョンのJavaFX8は、2014年3月18日にJavaの不可欠な部分としてリリースされました。

JavaFX-環境

Java8以降、JDK (Java Development Kit)*には *JavaFX ライブラリが含まれています。 したがって、JavaFXアプリケーションを実行するには、システムにJava8以降のバージョンをインストールするだけです。

それに加えて、EclipseやNetBeansのようなIDEはJavaFXのサポートを提供します。 この章では、さまざまな方法でJavaFXアプリケーションを実行するための環境の設定方法について説明します。

Java8のインストール

まず、コマンドプロンプトを開き、コマンド「Java」を入力して、システムにJavaがインストールされているかどうかを確認する必要があります。

システムにJavaをインストールしていない場合、コマンドプロンプトには次のスクリーンショットに示すメッセージが表示されます。

Javaのインストール

次に、以下の手順に従ってJavaをインストールします。

ステップ1 *-https://www.oracle.com/technetwork/java/javase/downloads/indexl[JavaSE Downloads]ページにアクセスし、次のスクリーンショットで強調表示されているJDK *Download ボタンをクリックします。

Java SEダウンロード

  • ステップ2 *-[ダウンロード]ボタンをクリックすると、[Java SE Development Kit 8ダウンロード]ページにリダイレクトされます。 このページには、さまざまなプラットフォーム用のJDKのリンクがあります。

ライセンス契約に同意し、それぞれのリンクをクリックして必要なソフトウェアをダウンロードします。

たとえば、Windows 64ビットオペレーティングシステムで作業している場合は、次のスクリーンショットで強調表示されているJDKバージョンをダウンロードする必要があります。

Java SE Development Kit 8ダウンロードページ

強調表示されたリンクをクリックすると、Windows 64ビットオペレーティングシステムに適したJava8 Development Kitがシステムにダウンロードされます。

  • ステップ3 *-ダウンロードしたバイナリ実行可能ファイルを実行して、JDK8のインストールを開始します。

Java SE Development Kit 8 Next

  • ステップ4 *-インストールディレクトリを選択します。

インストールディレクトリ

  • ステップ5 *-宛先フォルダーを選択して[次へ]をクリックすると、次のスクリーンショットに示すように、JavaFXインストールプロセスの進行状況バーが表示されます。

インストーラーの抽出

  • ステップ6 *-必要に応じてインストールディレクトリを変更します。変更しない場合は、デフォルトのディレクトリをそのまま使用して、先に進みます。

Destination_folder

  • ステップ7 *-次のスクリーンショットに示すように、閉じるボタンをクリックしてインストールプロセスを完了します。

Java SEインストール済み

Windows用のパスのセットアップ

Javaをインストールした後、パス変数を設定する必要があります。 * C:\ Program Files \ java \ jdk1.8.0_91 *ディレクトリにJavaをインストールしたと仮定します。

今、あなたは以下に記載されている手順に従うことができます-

  • 「マイコンピュータ」を右クリックして、「プロパティ」を選択します。
  • 「詳細」タブの下の「環境変数」ボタンをクリックします。
  • ここで、「Path」変数を変更して、Java実行可能ファイルへのパスも含まれるようにします。 たとえば、パスが現在「C:\ WINDOWS \ SYSTEM32」に設定されている場合、パスを「C:\ WINDOWS \ SYSTEM32」に変更します。 C:\ Program Files \ java \ jdk1.8.0_91 \ bin '

環境変数の編集

JavaFXのNetBeans環境の設定

*NetBeans8* は、JavaFXの組み込みサポートを提供します。 これをインストールすると、追加のプラグインまたはJARファイルなしでJavaFXアプリケーションを作成できます。 NetBeans環境をセットアップするには、以下に示す手順に従う必要があります。
  • ステップ1 *-https://netbeans.org/[NetBeans Webサイト] NetBeans Webサイトにアクセスし、[ダウンロード]ボタンをクリックしてNetBeansソフトウェアをダウンロードします。

NetBeans Webサイト

ステップ2 *-*ダウンロード*をクリックすると、さまざまなJavaアプリケーション用のNetBeansバンドルを提供するNetBeansソフトウェアのダウンロードページが表示されます。 次のスクリーンショットに示すように、 *JavaSE 用のNetBeansソフトウェアをダウンロードします。

NetBeansダウンロードページ

ステップ3 *-このボタンをクリックすると、 *netbeans-8.0-windows.exe という名前のファイルがシステムにダウンロードされます。 このファイルを実行してインストールします。 このファイルを実行すると、次のスクリーンショットに示すようにNetBeansインストーラーが起動します。

インストーラーの設定

構成が完了すると、インストーラーの*ようこそページ*が表示されます。

  • ステップ4 *-[次へ]ボタンをクリックして、インストールを続行します。

NetBeans IDEインストーラー

ステップ5 *-次のウィンドウには、 NETBEANS IDE 8.0ライセンス契約書があります*。 注意深く読み、「使用許諾契約の条項に同意します」のチェックボックスをオンにして契約に同意し、[次へ]ボタンをクリックします。

NetBeans Licenec Agreement

ステップ6 *-次のウィンドウで、 *Junit の使用許諾契約が表示されます。「使用許諾契約の条項に同意します、JUnitのインストール」のラジオボタンを選択して同意し、*次*をクリックします。

Junitライセンス契約に同意

ステップ7 *-Netbeans 8.0をインストールする必要がある宛先ディレクトリを選択します。 さらに、システムの *Java Development Kit がインストールされているディレクトリを参照して、 Next ボタンをクリックすることもできます。

NetBeansインストールNext

ステップ8 *-同様に、 *Glassfish Server のインストール先ディレクトリを選択します。 Java Development Kitディレクトリ(現在はGlassfishリファレンス)を参照し、[次へ]をクリックします。

Glassfishサーバーのインストール

  • ステップ9 *-自動更新の[更新の確認]ボックスをオンにし、[インストール]ボタンをクリックしてインストールを開始します。

インストールボタンをクリック

  • ステップ10 *-このステップはNetBeans IDE 8.0のインストールを開始し、しばらく時間がかかる場合があります。

NetBeans IDE 8.0のインストール

  • ステップ11 *-プロセスが完了したら、[完了]ボタンをクリックしてインストールを完了します。
  • ステップ12 *-NetBeans IDEを起動すると、次のスクリーンショットに示すような開始ページが表示されます。

スタートページ

ステップ13 *-ファイルメニューで、*新規プロジェクト …​を選択して、次のスクリーンショットに示すように新規プロジェクトウィザードを開きます。

NetBeansファイル

ステップ14 *-*新規プロジェクト*ウィザードで、 *JavaFX を選択し、*次*をクリックします。 新しいJavaFXアプリケーションの作成が開始されます。

新しいプロジェクトJavaFX

ステップ15 *- *NewJavaFX Application ウィンドウでプロジェクトの名前とプロジェクトの場所を選択し、 Finish をクリックします。 指定された名前でサンプルアプリケーションを作成します。

プロジェクト名

この例では、 javafxsample という名前のアプリケーションが作成されます。 このアプリケーション内で、NetBeans IDEは Javafxsample.java という名前のJavaプログラムを生成します。 次のスクリーンショットに示すように、このプログラムはNetBeansソースパッケージ*→javafxsample *内に作成されます。

Javafxsample java

  • ステップ16 *-ファイルを右クリックし、[ファイルを実行]を選択して、次のスクリーンショットに示すようにこのコードを実行します。

RunFile

この自動的に作成されたプログラムには、「* Hay World」というラベルの付いたボタンを持つ単純なJavaFXウィンドウを生成するコードが含まれています。 このボタンをクリックするたびに、文字列 *Hello World がコンソールに次のように表示されます。

Say Hello World

EclipseでのJavaFXのインストール

  • e(fx)** clipseという名前のプラグインもJavaFXで利用できます。 次の手順を使用して、EclipseでJavaFXを設定できます。 まず、システムにEclipseがあることを確認してください。 そうでない場合は、システムにEclipseをダウンロードしてインストールします。

Eclipseがインストールされたら、以下の手順に従ってシステムに e(fx)clipse をインストールします。

ステップ1 *- *Help メニューでEclipseを開き、以下に示すように Install New Software …オプションを選択します。

Java Eclipse

クリックすると、次のスクリーンショットに示すように、 Available Software ウィンドウが表示されます。

利用可能なソフトウェアウィンドウ

このウィンドウの[操作]テキストボックスで、必要なソフトウェアのプラグインのリンクを指定する必要があります。

ステップ2 *-*追加…ボタンをクリックします。 プラグインの名前を e(fx)clipse として指定します。 次に、次のリンクを場所として提供します。 http://download.eclipse.org/efxclipse/updates-released/2.3.0/site/

  • ステップ3 *-プラグインの名前と場所を指定した後、次のスクリーンショットで強調表示されている[OK]ボタンをクリックします。

リポジトリの追加

ステップ4 *-プラグインを追加するとすぐに、 *e(fx)clipse – install および e(fx)clipse – single components の2つのチェックボックスが表示されます。 これらのチェックボックスを両方オンにして、次のスクリーンショットに示すように、[追加]ボタンをクリックします。

e(fx)clipse単一コンポーネント

  • ステップ5 *-次に、Eclipse IDEを開きます。 次のスクリーンショットに示すように、[ファイル]メニューをクリックし、[プロジェクト]を選択します。

Eclipse IDEの[ファイルメニューをクリック]

ステップ6 *-次に、プロジェクトを作成するためにEclipseが提供するウィザードのリストを表示できるウィンドウが表示されます。 *JavaFX ウィザードを展開し、 JavaFX Project を選択して、次のスクリーンショットに示すように Next ボタンをクリックします。

新規プロジェクト選択ウィザード

  • ステップ7 *-*次*をクリックすると、新しいプロジェクトウィザードが開きます。 ここで、必要なプロジェクト名を入力し、*完了*をクリックできます。

プロジェクト名とクリックして終了

ステップ8 *-[完了]をクリックすると、指定された名前(サンプル)でアプリケーションが作成されます。 *application という名前のサブパッケージに、 Main.java という名前のプログラムが次のように生成されます。

メインJava

  • ステップ9 *-この自動生成プログラムには、空のJavaFXウィンドウを生成するコードが含まれています。 このファイルを右クリックして、次のスクリーンショットに示すように、「実行」→「Javaアプリケーション」を選択します。

Javaアプリケーションとして実行

このアプリケーションを実行すると、次のように空のJavaFXウィンドウが表示されます。

空のJavaFXウィンドウ

-コードの詳細については、後の章で説明します。

JavaFX-アーキテクチャ

JavaFXは、豊富なグラフィックスを備えたGUIアプリケーションを構築するための豊富なクラスとインターフェイスのセットを備えた完全なAPIを提供します。 このAPIの重要なパッケージは次のとおりです-

  • javafx.animation -塗りつぶし、フェード、回転、拡大縮小、変換などの遷移ベースのアニメーションをJavaFXノードに追加するクラスが含まれています。
  • javafx.application -JavaFXアプリケーションのライフサイクルを担当するクラスのセットが含まれています。
  • javafx.css -CSSのようなスタイルをJavaFX GUIアプリケーションに追加するクラスが含まれています。
  • javafx.event -JavaFXイベントを配信および処理するためのクラスとインターフェースが含まれています。
  • javafx.geometry -2Dオブジェクトを定義し、それらに対して操作を実行するクラスが含まれています。
  • javafx.stage -このパッケージには、JavaFXアプリケーションのトップレベルのコンテナクラスが含まれています。
  • javafx.scene -このパッケージは、シーングラフをサポートするクラスとインターフェイスを提供します。 さらに、キャンバス、チャート、コントロール、エフェクト、画像、入力、レイアウト、メディア、ペイント、形状、テキスト、変換、Webなどのサブパッケージも提供します。 このJavaFXの豊富なAPIをサポートするコンポーネントがいくつかあります。

次の図は、JavaFX APIのアーキテクチャを示しています。 ここでは、JavaFX APIをサポートするコンポーネントを見ることができます。

JavaFX APIのアーキテクチャ

シーングラフ

JavaFXでは、GUIアプリケーションはシーングラフを使用してコーディングされていました。 シーングラフは、GUIアプリケーションの構築の開始点です。 ノードと呼ばれる(GUI)アプリケーションプリミティブを保持します。

ノードは視覚的/グラフィカルなオブジェクトであり、それが含まれる場合があります-

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

一般に、ノードのコレクションはシーングラフを作成します。 これらのノードはすべて、以下に示すように階層順に配置されています。

シーングラフ

シーングラフの各ノードには単一の親があり、親を含まないノードは*ルートノード*と呼ばれます。

同様に、すべてのノードには1つ以上の子があり、子のないノードは*リーフノード*と呼ばれます。子を持つノードは*ブランチノード*と呼ばれます。

ノードインスタンスは、シーングラフに1回だけ追加できます。 シーングラフのノードには、効果、不透明度、変換、イベントハンドラー、イベントハンドラー、アプリケーション固有の状態を設定できます。

プリズム

Prismは、JavaFXでグラフィックスをレンダリングするために使用される*高性能ハードウェア加速グラフィックパイプライン*です。 2Dおよび3Dグラフィックの両方をレンダリングできます。

グラフィックをレンダリングするために、Prismは以下を使用します-

  • Windows XPおよびVista上のDirectX 9。
  • Windows 7上のDirectX 11。
  • MacおよびLinuxのOpenGL、組み込みシステム。

システム上のグラフィックスのハードウェアサポートが十分でない場合、Prismはソフトウェアレンダーパスを使用してグラフィックスを処理します。

サポートされているグラフィックカードまたはGPUで使用すると、よりスムーズなグラフィックを提供します。 システムがグラフィックカードをサポートしていない場合に備えて、Prismはデフォルトでソフトウェアレンダリングスタック(上記2つのいずれか)を使用します。

GWT(Glass Windowing Toolkit)

名前が示すように、GWTはWindows、タイマー、Surfaces、およびイベントキューを管理するサービスを提供します。 GWTはJavaFXプラットフォームをネイティブオペレーティングシステムに接続します。

量子ツールキット

これは、Prism、Glass、Media Engine、およびWeb Engineの低レベルコンポーネントを抽象化したものです。 PrismとGWTを結び付け、JavaFXで利用できるようにします。

WebView

JavaFXを使用して、HTMLコンテンツをシーングラフに埋め込むこともできます。 WebViewは、このコンテンツの処理に使用されるJavaFXのコンポーネントです。 内部のオープンソースWebブラウザーエンジンである Web Kit と呼ばれるテクノロジーを使用します。 このコンポーネントは、HTML5、CSS、JavaScript、DOM、SVGなどのさまざまなWebテクノロジーをサポートしています。

WebViewを使用すると、次のことができます-

  • ローカルまたはリモートURLからHTMLコンテンツをレンダリングします。
  • 履歴をサポートし、戻るおよび進むナビゲーションを提供します。
  • コンテンツをリロードします。
  • Webコンポーネントにエフェクトを適用します。
  • HTMLコンテンツを編集します。
  • JavaScriptコマンドを実行します。
  • イベントを処理します。

一般に、WebViewを使用して、JavaからWebコンテンツを制御できます。

メディアエンジン

  • JavaFXメディアエンジン*は、 Streamer として知られるオープンソースエンジンに基づいています。 このメディアエンジンは、ビデオおよびオーディオコンテンツの再生をサポートしています。

JavaFXメディアエンジンは、次のファイル形式のオーディオのサポートを提供します-

Audio
  • MP3
  • WAV
  • AIFF
Video
  • FLV

パッケージ javafx.scene.media には、JavaFXでメディア機能を提供するクラスとインターフェースが含まれています。 それは3つのコンポーネントの形で提供されます-

  • メディアオブジェクト-これはメディアファイルを表します
  • Media Player -メディアコンテンツを再生します。
  • メディアビュー-メディアを表示します。

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ウィンドウ

JavaFX-2Dシェイプ

前の章で、JavaFXの基本的なアプリケーションを見てきました。そこでは、空のウィンドウを作成する方法と、JavaFXのXY平面に線を引く方法を学びました。 線に加えて、他のいくつかの2D図形も描画できます。

2D形状

一般に、2DシェイプはXY平面に描画できる幾何学的図形であり、これらには線、長方形、円などが含まれます。

JavaFXライブラリを使用すると、描画することができます-

  • 線、長方形、円、楕円、多角形、ポリライン、3次曲線、四角形曲線、円弧などの事前定義された形状。
  • MoveTO Path Element、Line、Horizo​​ntal Line、Vertical Line、Cubic Curve、Quadratic Curve、Arcなどのパス要素。
  • これらに加えて、SVGパスを解析して2D形状を描くこともできます。

上記の2D形状はそれぞれクラスによって表され、これらのクラスはすべてパッケージ javafx.scene.shape に属します。 Shape という名前のクラスは、JavaFXのすべての2次元形状の基本クラスです。

2Dシェイプを作成する

チャートを作成するには、する必要があります-

  • 必要な形状のそれぞれのクラスをインスタンス化します。
  • 形状のプロパティを設定します。
  • 図形オブジェクトをグループに追加します。

各クラスのインスタンス化

2次元形状を作成するには、まず、それぞれのクラスをインスタンス化する必要があります。

たとえば、行を作成する場合は、次のようにLineという名前のクラスをインスタンス化する必要があります-

Line line = new Line();

シェイプのプロパティを設定する

クラスをインスタンス化した後、setterメソッドを使用して形状のプロパティを設定する必要があります。

たとえば、線を描くには、線の始点と終点のx座標とy座標を渡す必要があります。 次のように、それぞれのセッターメソッドを使用してこれらの値を指定できます-

//Setting the Properties of the Line
line.setStartX(150.0f);
line.setStartY(140.0f);
line.setEndX(450.0f);
line.setEndY(140.0f);

シェイプオブジェクトをグループに追加する

最後に、以下に示すように、コンストラクターのパラメーターとして渡すことにより、図形のオブジェクトをグループに追加する必要があります。

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

次の表に、JavaFXが提供するさまざまな形状(クラス)のリストを示します。

S.No Shape & Description
1

Line

線は、2点を結ぶ幾何学的構造です。 パッケージ javafx.scene.shapeLine クラスは、XY平面の線を表します。

2

Rectangle

一般に、長方形とは、すべての内角が直角である2対の平行で平行な辺を持つ4辺形の多角形です。 JavaFXでは、Rectangleは Rectangle という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.shape に属します。

3

Rounded Rectangle

JavaFXでは、鋭いエッジまたはアーチ型のエッジを持つ長方形を描くことができます。アーチ型のエッジを持つ長方形は、角丸長方形と呼ばれます。

4

Circle

円は、閉ループを形成する線であり、その上のすべての点は中心点から固定距離です。 JavaFXでは、円は Circle という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.shape に属します。

5

Ellipse

楕円は、それぞれフォーカスと呼ばれる2つのポイントによって定義されます。 楕円上の任意の点が取られた場合、焦点までの距離の合計は一定です。 楕円のサイズは、これら2つの距離の合計によって決まります。

JavaFXでは、楕円は Ellipse という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.shape に属します。

6

Polygon

端と端をつなぐ多数の共面線分によって形成される閉じた形状。 JavaFXでは、ポリゴンは Polygon という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.shape に属します。

7

Polyline

ポリラインは、ポリラインが最後に閉じられていないことを除いて、ポリゴンと同じです。 または、1つ以上の線分で構成される連続線。 JavaFXでは、ポリラインは Polygon という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.shape に属します。

8

Cubic Curve

3次曲線は、XY平面のベジェパラメトリック曲線であり、次数3の曲線です。 JavaFXでは、3次曲線は CubicCurve という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.shape に属します。

9

QuadCurve

2次曲線は、XY平面のベジェパラメトリック曲線であり、次数2の曲線です。 JavaFXでは、QuadCurveはQuadCurveという名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.shape に属します。

10

Arc

円弧は曲線の一部です。 JavaFXでは、アークは Arc という名前のクラスで表されます。 このクラスは、パッケージ- javafx.scene.shape に属します。

リンク:/javafx/2dshapes_types_of_arc [円弧のタイプ]

これに加えて、3種類の弧 Open、Chord、Round を描画できます。

11

SVGPath

JavaFXでは、SVGパスを解析して画像を構築できます。 このような形状は、 SVGPath という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.shape に属します。 このクラスには、Stringデータ型の content というプロパティがあります。 これは、画像を描画するSVGパスエンコード文字列を表します。

パスクラスを介してより多くの図形を描画する

前のセクションでは、クラスをインスタンス化し、それぞれのパラメーターを設定することにより、いくつかの単純な事前定義された形状を描画する方法を見てきました。

ただし、これらの事前定義された形状だけでは、* javafx.shapeパッケージ*で提供されるプリミティブ以外の複雑な形状を構築するには不十分です。

たとえば、次の図に示すようにグラフィカル要素を描画する場合、これらの単純な形状に依存することはできません。

パスクラス

パスクラス

このような複雑な構造を描画するために、JavaFXは Path という名前のクラスを提供します。 このクラスは、図形の幾何学的な輪郭を表します。

moveTo、LineTo、HlineTo、VlineTo、ArcTo、QuadCurveTo、CubicCurveToなどのさまざまな*パス要素*を保持する監視可能なリストに添付されます。

インスタンス化すると、このクラスは指定されたパス要素に基づいてパスを構築します。

次のようにインスタンス化しながら、このクラスにパス要素を渡すことができます-

Path myshape = new Path(pathElement1, pathElement2, pathElement3);

または、次のように* addAll()*メソッドを使用して、監視可能なリストを取得し、すべてのパス要素を追加できます-

Path myshape = new Path();
myshape.getElements().addAll(pathElement1, pathElement2, pathElement3);

また、add()メソッドを使用して要素を個別に追加することもできます-

Path myshape = new Path();
myshape.getElements().add(pathElement1);

パス要素への移動

パス要素 MoveTo は、パスの現在の位置を指定されたポイントに移動するために使用されます。 通常、パス要素を使用して描画された形状の開始点を設定するために使用されます。

パッケージ javafx.scene.shapeLineTo というクラスで表されます。 それは、二重データ型の2つのプロパティ、つまり-

  • X -現在の位置から線を引くポイントのx座標。
  • Y -現在位置から線が引かれるポイントのy座標。

あなたはMoveToクラスをインスタンス化し、次のように新しいポイントのx、y座標を渡すことにより、パス要素への移動を作成することができます-

MoveTo moveTo = new MoveTo(x, y);

コンストラクタに値を渡さない場合、新しいポイントは(0,0)に設定されます。

また、次のようにそれぞれのセッターメソッドを使用して、x、y座標に値を設定することができます-

setX(value);
setY(value);

例–複雑なパスの描画

この例では、 Path、MoveTo 、および Line クラスを使用して次の形状を描画する方法を示します。

複雑なパス

このコードを ComplexShape.java という名前のファイルに保存します。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;

public class ComplexShape extends Application {
   @Override
   public void start(Stage stage) {
     //Creating a Path
      Path path = new Path();

     //Moving to the starting point
      MoveTo moveTo = new MoveTo(108, 71);

     //Creating 1st line
      LineTo line1 = new LineTo(321, 161);

     //Creating 2nd line
      LineTo line2 = new LineTo(126,232);

     //Creating 3rd line
      LineTo line3 = new LineTo(232,52);

     //Creating 4th line
      LineTo line4 = new LineTo(269, 250);

     //Creating 4th line
      LineTo line5 = new LineTo(108, 71);

     //Adding all the elements to the path
      path.getElements().add(moveTo);
      path.getElements().addAll(line1, line2, line3, line4, line5);

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

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

     //Setting title to the Stage
      stage.setTitle("Drawing an arc through a path");

     //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 ComplexShape.java
java ComplexShape

上記のプログラムは、実行時にアークを表示するJavaFXウィンドウを生成します。このウィンドウは、以下に示すように、現在の位置から指定したポイントまで描画されます。

パスから円弧を描く

以下は、JavaFXが提供するさまざまなパス要素(クラス)です。 これらのクラスは、パッケージ javafx.shape に存在します。 これらのクラスはすべて、クラス PathElement を継承します。

S.No Shape & Description
1

LineTo

パス要素 line は、現在の位置から指定された座標内のポイントに直線を描くために使用されます。 LineTo という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.shape に属します。

2

HlineTo

パス要素 HLineTo は、現在の位置から指定された座標内のポイントに水平線を描画するために使用されます。 HLineTo という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.shape に属します。

3

VLineTo

パス要素 vertical line は、現在の位置から指定された座標内のポイントに垂直線を描画するために使用されます。 VLineTo という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.shape に属します。

4

QuadCurveTo

パス要素の2次曲線は、現在の位置から指定された座標のポイントに* 2次曲線*を描くために使用されます。 QuadraticCurveTo という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.shape に属します。

5

CubicCurveTo

パス要素 cubic curve は、現在の位置から指定された座標のポイントに3次曲線を描くために使用されます。 CubicCurveTo という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.shape に属します。

6

ArcTo

パス要素 Arc は、現在の位置から指定された座標内のポイントに円弧を描くために使用されます。 ArcTo という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.shape に属します。

2Dオブジェクトのプロパティ

すべての2次元オブジェクトについて、塗りつぶし、ストローク、StrokeTypeなどのさまざまなプロパティを設定できます。 次のセクションでは、2Dオブジェクトのさまざまなプロパティについて説明します。

  • リンク:/javafx/stroke_type [ストロークタイプ]
  • リンク:/javafx/stroke_width [ストローク幅]
  • リンク:/javafx/stroke_fill [ストロークフィル]
  • リンク:/javafx/stroke [ストローク]
  • リンク:/javafx/stroke_line_join [ストロークライン]
  • リンク:/javafx/stroke_miter_limit [ストロークマイターリミット]
  • リンク:/javafx/stroke_line_cap [ストロークラインキャップ]
  • リンク:/javafx/smooth [スムーズ]

2Dオブジェクトの操作

グループに複数のシェイプを追加する場合、以下に示すように、最初のシェイプは2番目のシェイプと重なります。

2Dオブジェクトの操作

変換(回転、拡大縮小、変換など)、遷移(アニメーション)に加えて、2Dオブジェクトに対して3つの操作( Union、SubtractionIntersection )を実行することもできます。

S.No Operation & Description
1

Union Operation

この操作は、入力として2つ以上の形状を取り、それらが占める領域を返します。

2

Intersection Operation

この操作は、入力として2つ以上の形状を取り、それらの間の交差領域を返します。

3

Subtraction Operation

この操作は、入力として2つ以上の形状を取ります。 次に、2番目の図形と重なる領域を除く、最初の図形の領域を返します。

JavaFX-テキスト

さまざまな形状と同様に、JavaFXでテキストノードを作成することもできます。 テキストノードは、パッケージ javafx.scene.text に属する Text という名前のクラスで表されます。

このクラスには、JavaFXでテキストを作成し、その外観を変更するためのいくつかのプロパティが含まれています。 このクラスは、パッケージ javafx.scene.shape に属するShapeクラスも継承します。

したがって、フォント、配置、行間隔、テキストなどのテキストのプロパティに加えて また、* strokeFill、stroke、strokeWidth、strokeTypeなどの基本的なシェイプノードプロパティを継承します。

テキストノードの作成

パッケージ javafx.scene.text のクラスTextはJavaFXのテキストノードを表すため、次のようにこのクラスをインスタンス化することでテキストを作成できます-

Text text = new Text();

クラスTextには、作成されるテキストを表す文字列型の text という名前のプロパティが含まれています。

Textクラスをインスタンス化した後、以下に示すように* setText()*メソッドを使用してこのプロパティに値を設定する必要があります。

String text = "Hello how are you"
Text.setText(text);

また、次のコードブロックに示すように、それぞれのセッターメソッド、すなわち* setX()および setY()*を使用してプロパティxおよびyに値を指定することにより、テキストの位置(原点)を設定することもできます-

text.setX(50);
text.setY(50);

次のプログラムは、JavaFXでテキストノードを作成する方法を示す例です。 このコードを TextExample.java という名前のファイルに保存します。

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

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

     //Setting the text to be added.
      text.setText("Hello how are you");

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

     //Creating a Group object
      Group root = new Group(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 TextExample.java
java TextExample

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

サンプルアプリケーションテキスト

テキストの位置とフォント

デフォルトでは、テキストクラスによって作成されたテキストは、フォント…、サイズ…、および黒色です。

  • setFont()メソッドを使用して、テキストのフォントサイズと色を変更できます。 このメソッドは、 *Font クラスのオブジェクトを受け入れます。

パッケージ javafx.scene.textFont という名前のクラスは、テキストのフォントを定義するために使用されます。 このクラスには、* font()*という名前の静的メソッドが含まれています。

このメソッドは、4つのパラメータを受け入れます-

  • family -これは文字列型で、テキストに適用するフォントのファミリーを表します。
  • 重量-このプロパティは、フォントの重量を表します。 - FontWeight.BLACK、FontWeight.BOLD、FontWeight.EXTRA_BOLD、FontWeight.EXTRA_LIGHT、LIGHT、MEDIUM、NORMAL、SEMI_BOLD、THIN の9つの値を受け入れます。
  • posture -このプロパティは、フォントの姿勢(通常または斜体)を表します。 2つの値 FontPosture.REGULAR および FontPosture.ITALIC を受け入れます。
  • サイズ-このプロパティはdouble型で、フォントのサイズを表します。

次の方法を使用して、テキストにフォントを設定できます-

text.setFont(Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 20));

次のプログラムは、JavaFXでテキストノードのフォントを設定する方法を示す例です。 ここでは、フォントをVerdana、太さを太字、姿勢を標準、サイズを20に設定しています。

このコードを TextFontExample.java という名前のファイルに保存します。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;

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

     //Setting font to the text
      text.setFont(Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 20));

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

     //Setting the text to be added.
      text.setText("Hi how are you");

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

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

     //Setting title to the Stage
      stage.setTitle("Setting Font to the text");

     //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 TextFontExample.java
java TextFontExample

実行すると、上記のプログラムは、次のように指定されたフォントでテキストを表示するJavaFXウィンドウを生成します-

フォントをテキストに設定

ストロークと色

Textクラスは、パッケージのShapeクラスも継承します。 したがって、 javafx.scene.shape を使用して、テキストノードにストロークと色を設定することもできます。

次のように、シェイプ(継承)クラスの* setFill()*メソッドを使用して、テキストに色を設定できます-

text.setFill(Color.BEIGE);

同様に、メソッド* setStroke()を使用して、テキストのストロークの色を設定できます。 ストロークの幅は、次のようにメソッド setStrokeWidth()*を使用して設定できます-

//Setting the color
text.setFill(Color.BROWN);

//Setting the Stroke
text.setStrokeWidth(2);

//Setting the stroke color
text.setStroke(Color.BLUE);

次のプログラムは、テキストノードの色、strokeWidth、およびstrokeColorを設定する方法を示す例です。 このコードでは、ストロークの色を青、テキストの色を茶色、ストロークの幅を2に設定しています。

このコードを StrokeExample.java という名前のファイルに保存します。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;

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

     //Setting font to the text
      text.setFont(Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 50));

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

     //Setting the color
      text.setFill(Color.BROWN);

     //Setting the Stroke
      text.setStrokeWidth(2);

     //Setting the stroke color
      text.setStroke(Color.BLUE);

     //Setting the text to be added.
      text.setText("Hi how are you");

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

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

     //Setting title to the Stage
      stage.setTitle("Setting font to the text");

     //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 StrokeExample.java
java StrokeExample

実行すると、上記のプログラムは、次のように指定されたストロークと色の属性を持つテキストを表示するJavaFXウィンドウを生成します-

テキストストロークの例

テキストへの装飾の適用

取り消し線などの装飾を適用することもできます。この場合、テキストを介して行が渡されます。 Text クラスのメソッドを使用して、テキストに下線を引くことができます。

メソッド* setStrikethrough()を使用してテキストを打ち消すことができます。 これはブール値を受け入れ、次のコードボックスに示すようにテキストを打ち消すためにこのメソッドに値 *true を渡します-

//Striking through the text
text1.setStrikethrough(true);

同様に、次のように値 true をメソッド* setUnderLine()*に渡すことにより、テキストに下線を引くことができます-

//underlining the text
text2.setUnderline(true);

次のプログラムは、 underlinestrike through などの装飾をテキストに適用する方法を示す例です。 このコードを DecorationsExample.java という名前のファイルに保存します。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;

public class DecorationsExample extends Application {
   @Override
   public void start(Stage stage) {
     //Creating a Text_Example object
      Text text1 = new Text("Hi how are you");

     //Setting font to the text
      text1.setFont(Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 20));

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

     //Striking through the text
      text1.setStrikethrough(true);

     //Creating a Text_Example object
      Text text2 = new Text("Welcome to finddevguides");

     //Setting font to the text
      text2.setFont(Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 20));

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

     //underlining the text
      text2.setUnderline(true);

     //Creating a Group object
      Group root = new Group(text1, text2);

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

     //Setting title to the Stage
      stage.setTitle("Decorations Example");

     //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 DecorationsExample.java
java DecorationsExample

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

装飾の例

JavaFX-エフェクト

効果とは、グラフィックの外観を強化するアクションです。 JavaFXでは、効果は視覚的にノードの外観を向上させるためにノードに適用されるアルゴリズムです。 Node クラスのエフェクトプロパティは、エフェクトを指定するために使用されます。

JavaFXでは、 bloom、blurglow などのさまざまな効果をノードに設定できます。 これらの各効果はクラスによって表され、これらのすべてのクラスは javafx.scene.effect という名前のパッケージで利用できます。

ノードへの効果の適用

  • setEffect()*メソッドを使用して、ノードにエフェクトを適用できます。 このメソッドには、エフェクトのオブジェクトを渡す必要があります。

ノードに効果を適用するには、する必要があります-

  • ノードを作成します。
  • 適用する必要があるエフェクトのそれぞれのクラスをインスタンス化します。
  • エフェクトのプロパティを設定します。
  • * setEffect()*メソッドを使用して、ノードにエフェクトを適用します。

ノードの作成

まず、それぞれのクラスをインスタンス化して、JavaFXアプリケーションにノードを作成します。

たとえば、アプリケーション内の画像にグロー効果を適用する場合。 最初に、Imageクラスをインスタンス化して画像ノードを作成し、以下に示すようにビューを設定する必要があります。

//Creating an image
Image image = new Image("https://www.finddevguides.com/green/images/logo.png");

//Setting the image view
ImageView imageView = new ImageView(image);

//Setting the position of the image
imageView.setX(100);
imageView.setY(70);

//setting the fit height and width of the image view
imageView.setFitHeight(200);
imageView.setFitWidth(400);

//Setting the preserve ratio of the image view
imageView.setPreserveRatio(true);

各クラスのインスタンス化

作成されたノードに適用する必要がある効果を表すクラスをインスタンス化します。

たとえば-グロー効果を適用するには、次のコードボックスに示すように Glow クラスをインスタンス化する必要があります-

Glow glow = new Glow();

エフェクトのプロパティを設定する

クラスをインスタンス化した後、セッターメソッドを使用してエフェクトのプロパティを設定する必要があります。

例-3次元ボックスを描画するには、幅、高さ、深さを渡す必要があります。 以下に示すように、それぞれのセッターメソッドを使用してこれらの値を指定できます-

//setting the level property
glow.setLevel(0.9);

ノードへの効果の追加

最後に、* setEffect()*メソッドを使用して、必要な効果をノードに適用できます。 例:グロー効果を画像ノードに設定するには、次のようにこのメソッドにGlowクラスのオブジェクトを渡す必要があります-

imageView.setEffect(glow);
  • JavaFXエフェクト*-次の表に、JavaFXが提供するさまざまなエフェクト(クラス)のリストを示します。 これらのクラスは、 javafx.scene.effect というパッケージに存在します。
S.No Shape and Description
1

Color Adjust

画像に色調整効果を適用して、画像の色を調整できます。 これには、各ピクセルの*色相、彩度、明度*および*コントラスト*の調整が含まれます

パッケージ javafx.scene.effectColorAdjust というクラスは、色調整効果を表します。

2

Color Input

カラー入力エフェクトは、長方形を描画して色で塗りつぶすのと同じ出力を提供します。 他のエフェクトとは異なり、このエフェクトをノードに適用すると、ノードではなく長方形のボックスのみが表示されます。 このエフェクトは、主に他のエフェクトの入力として渡すために使用されます。

パッケージ javafx.scene.effectColorInput という名前のクラスは、色の入力効果を表します。

3

Image Input

JavaFXの画像入力エフェクトは、JavaFX画面に画像を埋め込むだけです。

Color Inputエフェクト(指定された色付きの長方形の領域を他のエフェクトへの入力として渡すために使用されます)と同様に、Image Inputエフェクトは指定された画像を別のエフェクトへの入力として渡します。

パッケージ javafx.scene.effectImageInput という名前のクラスは、イメージ入力エフェクトを表します。

4

Blend

一般に、ブレンドとは、2つ以上の異なるものまたは物質の混合物を意味します。 このブレンド効果を適用すると、同じ位置にある2つの異なる入力のピクセルを取得し、*ブレンドモード*に基づいて結合された出力を生成します。

パッケージ javafx.scene.effectBlend という名前のクラスは、ブレンド効果を表します。

5

Bloom

ブルーム効果を適用すると、ノードの一部のピクセルがグローになります。

パッケージ javafx.scene.effectBloom というクラスは、ブルーム効果を表します。

6

Glow

ブルームと同様に、グローエフェクトは指定された入力画像をグローさせ、このエフェクトは入力の明るいピクセルをより明るくします。

パッケージ javafx.scene.effectGlow という名前のクラスは、グロー効果を表します。

7

Box Blur

このぼかし効果をノードに適用すると、不明瞭になります。 ボックスぼかしは、JavaFXが提供するぼかし効果の一種です。 この効果では、ノードにぼかしを適用するときに、単純なボックスフィルターが使用されます。

パッケージ javafx.scene.effectBoxBlur という名前のクラスは、boxblurエフェクトを表します。

8

GaussianBlur

Box Blur Gaussianと同様に、JavaFXのノードをぼかします。 *ガウスぼかし効果*の唯一の違いは、ガウス畳み込みカーネルを使用してぼかし効果を生成することです。

パッケージ javafx.scene.effect のGaussianBlurというクラスは、ガウスぼかし効果を表します。

9

MotionBlur

ガウス効果と同様に、モーションブラーはJavaFXのノードをぼかす効果です。 また、ぼかし効果を生成するためにガウス畳み込みカーネルを使用しますが、この効果の違いは、指定された角度でガウス畳み込みカーネルが使用されることです。

パッケージ javafx.scene.effectMotionBlur というクラスは、モーションブラーエフェクトを表します。

10

Reflection

JavaFXのノードに反射効果を適用すると、ノードの下部に反射が追加されます。

パッケージ javafx.scene.effectReflection という名前のクラスは、反射効果を表します。

11

SepiaTone

JavaFXのノード(一般的なイメージ)にセピアトーン効果を適用すると、赤褐色の色調になります。

パッケージ javafx.scene.effectSepiaTone という名前のクラスは、セピアトーン効果を表します。

12

Shadow

この効果は、ぼやけたエッジを持つ指定されたノードの複製を作成します。

パッケージ javafx.scene.effectShadow という名前のクラスは、セピアトーン効果を表します。

13

DropShadow

この効果をノードに適用すると、指定したノードの背後に影が作成されます。

パッケージ javafx.scene.effectDropShadow という名前のクラスは、ドロップシャドウ効果を表します。

14

InnerShadow

この効果をノードに適用すると、ノードのエッジの内側に影が作成されます。

パッケージ javafx.scene.effectInnerShadow という名前のクラスは、内部シャドウ効果を表します。

15

Lighting

照明効果は、光源からの光をシミュレートするために使用されます。 さまざまな種類の光源、つまり*ポイント*、距離、および*スポット*があります。

パッケージ javafx.scene.effectLighting というクラスは、照明効果を表します。

16

Light.Distant

この効果をノードに適用すると、まるで遠くの光源によって生成されているかのように、ノード上でライトがシミュレートされます。

遠方光源-ノードから遠い距離にある光源。 ここでは、光源から一方向に光が減衰します。

パッケージ javafx.scene.effectLight.Distant というクラスは、遠方の光源を表します。

17

Light.Spot

この効果をノードに適用すると、スポットライトによって生成されているかのように、ライトがシミュレートされます。

スポット光源-この光源からの光は全方向に減衰します。 光の強度は、光源からオブジェクトまでの距離に依存します。

パッケージ javafx.scene.effectLight.Spot という名前のクラスは、遠方の光源を表します。

18

Point.Spot

この効果をノードに適用すると、点光源によって生成されているかのように、ノード上でライトがシミュレートされます。

点光源-この光源からの光は、単一の点からすべての方向に減衰します。 光の強度は、光源からオブジェクトまでの距離に依存します。

パッケージjavafx.scene.effectの Point.Spot という名前のクラスは、ポイントライトを表します。

JavaFX-変換

変換とは、ルールを適用することにより、いくつかのグラフィックスを別のものに変更することを意味します。 Translation、拡大または縮小、Rotation、Shearing などのさまざまなタイプの変換を使用できます。

JavaFXを使用すると、回転、スケーリング、変換などの変換をノードに適用できます。 これらの変換はすべてさまざまなクラスによって表され、これらはパッケージ javafx.scene.transform に属します。

S.No Transformation & Description
1

Rotation

回転では、オブジェクトを原点から特定の角度*θ(シータ)*で回転させます。

2

Scaling

オブジェクトのサイズを変更するには、スケーリング変換が使用されます。

3

Translation

オブジェクトを画面上の別の位置に移動します。

4

Shearing

オブジェクトの形状を傾斜させる変換は、せん断変換と呼ばれます。

複数の変換

JavaFXのノードに複数の変換を適用することもできます。 次のプログラムは、長方形に対して同時に Rotation、Scaling および Translation 変換を実行する例です。

このコードを名前でファイルに保存します-

*MultipleTransformationsExample.java* 。
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Scale;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;

public class MultipleTransformationsExample extends Application {
   @Override
   public void start(Stage stage) {
     //Drawing a Rectangle
      Rectangle rectangle = new Rectangle(50, 50, 100, 75);

     //Setting the color of the rectangle
      rectangle.setFill(Color.BURLYWOOD);

     //Setting the stroke color of the rectangle
      rectangle.setStroke(Color.BLACK);

     //creating the rotation transformation
      Rotate rotate = new Rotate();

     //Setting the angle for the rotation
      rotate.setAngle(20);

     //Setting pivot points for the rotation
      rotate.setPivotX(150);
      rotate.setPivotY(225);

     //Creating the scale transformation
      Scale scale = new Scale();

     //Setting the dimensions for the transformation
      scale.setX(1.5);
      scale.setY(1.5);

     //Setting the pivot point for the transformation
      scale.setPivotX(300);
      scale.setPivotY(135);

     //Creating the translation transformation
      Translate translate = new Translate();

     //Setting the X,Y,Z coordinates to apply the translation
      translate.setX(250);
      translate.setY(0);
      translate.setZ(0);

     //Adding all the transformations to the rectangle
      rectangle.getTransforms().addAll(rotate, scale, translate);

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

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

     //Setting title to the Stage
      stage.setTitle("Multiple transformations");

     //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 MultipleTransformationsExample.java
java MultipleTransformationsExample

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

複数の変換

3Dオブジェクトの変換

3Dオブジェクトに変換を適用することもできます。 以下は、3次元ボックスを回転および平行移動する例です。

このコードを RotationExample3D.java という名前のファイルに保存します。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.Box;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;

public class RotationExample3D extends Application {
   @Override
   public void start(Stage stage) {
     //Drawing a Box
      Box box = new Box();

     //Setting the properties of the Box
      box.setWidth(150.0);
      box.setHeight(150.0);
      box.setDepth(150.0);

     //Creating the translation transformation
      Translate translate = new Translate();
      translate.setX(400);
      translate.setY(150);
      translate.setZ(25);

      Rotate rxBox = new Rotate(0, 0, 0, 0, Rotate.X_AXIS);
      Rotate ryBox = new Rotate(0, 0, 0, 0, Rotate.Y_AXIS);
      Rotate rzBox = new Rotate(0, 0, 0, 0, Rotate.Z_AXIS);
      rxBox.setAngle(30);
      ryBox.setAngle(50);
      rzBox.setAngle(30);
      box.getTransforms().addAll(translate,rxBox, ryBox, rzBox);

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

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

     //Setting title to the Stage
      stage.setTitle("Drawing a cylinder");

     //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 RotationExample3D.java
java RotationExample3D

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

3d回転

JavaFX-アニメーション

一般に、オブジェクトをアニメートするということは、高速表示によってオブジェクトの動きを錯覚させることを意味します。 JavaFXでは、時間とともにプロパティを変更することでノードをアニメーション化できます。 JavaFXは、 javafx.animation という名前のパッケージを提供します。 このパッケージには、ノードのアニメーション化に使用されるクラスが含まれています。 アニメーションは、これらすべてのクラスの基本クラスです。

JavaFXを使用すると、フェード遷移フィル遷移回転遷移スケール遷移ストローク遷移変換遷移パス遷移シーケンシャル遷移などのアニメーション(遷移)を適用できます。 *、*一時停止遷移、*並列遷移*など

これらすべての遷移は、パッケージ javafx.animation の個々のクラスによって表されます。

特定のアニメーションをノードに適用するには、以下に示す手順に従う必要があります-

  • それぞれのクラスを使用して必要なノードを作成します。
  • 適用されるそれぞれの遷移(アニメーション)クラスをインスタンス化します
  • 遷移のプロパティを設定し、
  • 最後に、 Animation クラスの* play()*メソッドを使用してトランジションを再生します。

この章では、基本的な遷移(回転、スケーリング、翻訳)の例を説明します。

トランジションを回転

以下は、JavaFXのRotate Transitionを示すプログラムです。 このコードを RotateTransitionExample.java という名前のファイルに保存します。

import javafx.animation.RotateTransition;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Polygon;
import javafx.stage.Stage;
import javafx.util.Duration;

public class RotateTransitionExample extends Application {
   @Override
   public void start(Stage stage) {
     //Creating a hexagon
      Polygon hexagon = new Polygon();

     //Adding coordinates to the hexagon
      hexagon.getPoints().addAll(new Double[]{
         200.0, 50.0,
         400.0, 50.0,
         450.0, 150.0,
         400.0, 250.0,
         200.0, 250.0,
         150.0, 150.0,
      });
     //Setting the fill color for the hexagon
      hexagon.setFill(Color.BLUE);

     //Creating a rotate transition
      RotateTransition rotateTransition = new RotateTransition();

     //Setting the duration for the transition
      rotateTransition.setDuration(Duration.millis(1000));

     //Setting the node for the transition
      rotateTransition.setNode(hexagon);

     //Setting the angle of the rotation
      rotateTransition.setByAngle(360);

     //Setting the cycle count for the transition
      rotateTransition.setCycleCount(50);

     //Setting auto reverse value to false
      rotateTransition.setAutoReverse(false);

     //Playing the animation
      rotateTransition.play();

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

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

     //Setting title to the Stage
      stage.setTitle("Rotate transition example ");

     //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 RotateTransitionExample.java
java RotateTransitionExample

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

トランジションの回転

スケール遷移

以下は、JavaFXのスケール遷移を示すプログラムです。 このコードを ScaleTransitionExample.java という名前のファイルに保存します。

import javafx.animation.ScaleTransition;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;

public class ScaleTransitionExample extends Application {
   @Override
   public void start(Stage stage) {
     //Drawing a Circle
      Circle circle = new Circle();

     //Setting the position of the circle
      circle.setCenterX(300.0f);
      circle.setCenterY(135.0f);

     //Setting the radius of the circle
      circle.setRadius(50.0f);

     //Setting the color of the circle
      circle.setFill(Color.BROWN);

     //Setting the stroke width of the circle
      circle.setStrokeWidth(20);

     //Creating scale Transition
      ScaleTransition scaleTransition = new ScaleTransition();

     //Setting the duration for the transition
      scaleTransition.setDuration(Duration.millis(1000));

     //Setting the node for the transition
      scaleTransition.setNode(circle);

     //Setting the dimensions for scaling
      scaleTransition.setByY(1.5);
      scaleTransition.setByX(1.5);

     //Setting the cycle count for the translation
      scaleTransition.setCycleCount(50);

     //Setting auto reverse value to true
      scaleTransition.setAutoReverse(false);

     //Playing the animation
      scaleTransition.play();

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

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

     //Setting title to the Stage
      stage.setTitle("Scale transition example");

     //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 ScaleTransitionExample.java
java ScaleTransitionExample

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

スケール遷移

トランジションを翻訳

以下は、JavaFXのTranslate Transitionを示すプログラムです。 このコードを TranslateTransitionExample.java という名前のファイルに保存します。

import javafx.animation.TranslateTransition;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;

public class TranslateTransitionExample extends Application {
   @Override
   public void start(Stage stage) {
     //Drawing a Circle
      Circle circle = new Circle();

     //Setting the position of the circle
      circle.setCenterX(150.0f);
      circle.setCenterY(135.0f);

     //Setting the radius of the circle
      circle.setRadius(100.0f);

     //Setting the color of the circle
      circle.setFill(Color.BROWN);

     //Setting the stroke width of the circle
      circle.setStrokeWidth(20);

     //Creating Translate Transition
      TranslateTransition translateTransition = new TranslateTransition();

     //Setting the duration of the transition
      translateTransition.setDuration(Duration.millis(1000));

     //Setting the node for the transition
      translateTransition.setNode(circle);

     //Setting the value of the transition along the x axis.
      translateTransition.setByX(300);

     //Setting the cycle count for the transition
      translateTransition.setCycleCount(50);

     //Setting auto reverse value to false
      translateTransition.setAutoReverse(false);

     //Playing the animation
      translateTransition.play();

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

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

     //Setting title to the Stage
      stage.setTitle("Translate transition example");

     //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 TranslateTransitionExample.java
java TranslateTransitionExample

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

トランジションの変換

これらに加えて、JavaFXは、ノードにより多くの遷移を適用するクラスを提供します。 以下は、JavaFXがサポートする他の種類の遷移です。

  • ノードリンクの属性に影響を与える遷移:/javafx/javafx_geometrical_transitions [Fade、Fill、Stroke]
  • 複数の基本的な遷移リンクを含む遷移:/javafx/javafx_sequential_parallel [Sequential、Parallel、Pause]
  • 指定されたパスリンクに沿ってオブジェクトを変換する遷移:/javafx/javafx_path_transition [Path Transition]

JavaFX-色

アプリケーションに色を適用するために、JavaFXはパッケージ javafx.scene.paint パッケージでさまざまなクラスを提供します。 このパッケージには、Paintという名前の抽象クラスが含まれており、色を適用するために使用されるすべてのクラスの基本クラスです。

これらのクラスを使用すると、次のパターンで色を適用できます-

  • 均一-このパターンでは、ノード全体に均一に色が適用されます。

  • 画像パターン-これにより、ノードの領域を画像パターンで塗りつぶすことができます。

  • グラデーション-このパターンでは、ノードに適用される色は、ある点から別の点に変化します。 2種類のグラデーション、すなわち*線形グラデーション*と*放射グラデーション*があります。

    *Shape、Text* (Sceneを含む)など、色を適用できるすべてのノードクラスには、* setFill()*および* setStroke()*という名前のメソッドがあります。 これらは、それぞれノードとそのストロークの色の値を設定するのに役立ちます。

これらのメソッドは、Paintタイプのオブジェクトを受け入れます。 したがって、これらのタイプの画像のいずれかを作成するには、これらのクラスをインスタンス化し、オブジェクトをパラメーターとしてこれらのメソッドに渡す必要があります。

ノードに色を適用する

ノードに均一なカラーパターンを設定するには、次のように* setFill() setStroke()*メソッドにクラスカラーのオブジェクトを渡す必要があります-

//Setting color to the text
Color color = new Color.BEIGE
text.setFill(color);

//Setting color to the stroke
Color color = new Color.DARKSLATEBLUE
circle.setStroke(color);

上記のコードブロックでは、カラークラスの静的変数を使用してカラーオブジェクトを作成しています。

同様に、以下に示すように、RGB値またはカラーのHSB標準またはカラーのWebハッシュコードを使用することもできます-

//creating color object by passing RGB values
Color c = Color.rgb(0,0,255);

//creating color object by passing HSB values
Color c = Color.hsb(270,1.0,1.0);

//creating color object by passing the hash code for web
Color c = Color.web("0x0000FF",1.0);

以下は、JavaFXのノードに色を適用する方法を示す例です。 ここでは、円とテキストノードを作成し、それらに色を適用しています。

このコードを ColorExample.java という名前のファイルに保存します。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;

public class ColorExample extends Application {
   @Override
   public void start(Stage stage) {
     //Drawing a Circle
      Circle circle = new Circle();

     //Setting the properties of the circle
      circle.setCenterX(300.0f);
      circle.setCenterY(180.0f);
      circle.setRadius(90.0f);

     //Setting color to the circle
      circle.setFill(Color.DARKRED);

     //Setting the stroke width
      circle.setStrokeWidth(3);

     //Setting color to the stroke
      circle.setStroke(Color.DARKSLATEBLUE);

     //Drawing a text
      Text text = new Text("This is a colored circle");

     //Setting the font of the text
      text.setFont(Font.font("Edwardian Script ITC", 50));

     //Setting the position of the text
      text.setX(155);
      text.setY(50);

     //Setting color to the text
      text.setFill(Color.BEIGE);
      text.setStrokeWidth(2);
      text.setStroke(Color.DARKSLATEBLUE);

     //Creating a Group object
      Group root = new Group(circle, text);

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

     //Setting title to the Stage
      stage.setTitle("Color Example");

     //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 ColorExample.java
java ColorExample

実行すると、上記のプログラムは次のようにJavaFXウィンドウを生成します-

色の例

ノードへの画像パターンの適用

ノードに画像パターンを適用するには、 ImagePattern クラスをインスタンス化し、そのオブジェクトを* setFill() setStroke()*メソッドに渡します。

このクラスのコンストラクタは、6つのパラメータを受け入れます-

  • 画像-パターンの作成に使用する画像のオブジェクト。
  • xおよびy -アンカー長方形の原点の(x、y)座標を表す二重変数。
  • 高さと幅-パターンの作成に使用される画像の高さと幅を表す二重変数。
  • isProportional -これはブール変数です。このプロパティをtrueに設定すると、開始位置と終了位置が比例するように設定されます。
ImagePattern radialGradient = new ImagePattern(dots, 20, 20, 40, 40, false);

以下は、JavaFXのノードにイメージパターンを適用する方法を示す例です。 ここでは、円とテキストノードを作成し、それらに画像パターンを適用しています。

このコードを ImagePatternExample.java という名前のファイルに保存します。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;

import javafx.scene.paint.Color;
import javafx.scene.paint.ImagePattern;
import javafx.scene.paint.Stop;

import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;

public class ImagePatternExample extends Application {
   @Override
   public void start(Stage stage) {
     //Drawing a Circle
      Circle circle = new Circle();

     //Setting the properties of the circle
      circle.setCenterX(300.0f);
      circle.setCenterY(180.0f);
      circle.setRadius(90.0f);

     //Drawing a text
      Text text = new Text("This is a colored circle");

     //Setting the font of the text
      text.setFont(Font.font("Edwardian Script ITC", 50));

     //Setting the position of the text
      text.setX(155);
      text.setY(50);

     //Setting the image pattern
      String link = "https://encrypted-tbn1.gstatic.com"
         + "/images?q=tbn:ANd9GcRQub4GvEezKMsiIf67U"
         + "rOxSzQuQ9zl5ysnjRn87VOC8tAdgmAJjcwZ2qM";

      Image image = new Image(link);
      ImagePattern radialGradient = new ImagePattern(image, 20, 20, 40, 40, false);

     //Setting the linear gradient to the circle and text
      circle.setFill(radialGradient);
      text.setFill(radialGradient);

     //Creating a Group object
      Group root = new Group(circle, text);

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

     //Setting title to the Stage
      stage.setTitle("Image pattern Example");

     //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 ImagePatternExample.java
java ImagePatternExample

実行すると、上記のプログラムは次のようにJavaFXウィンドウを生成します-

画像パターンの例

線形グラデーションパターンの適用

ノードに線形グラデーションパターンを適用するには、 LinearGradient クラスをインスタンス化し、そのオブジェクトを* setFill()、setStroke()*メソッドに渡します。

このクラスのコンストラクタは、すなわち、5つのパラメータを受け入れます-

  • startX、startY -これらのdoubleプロパティは、グラデーションの開始点のxおよびy座標を表します。
  • endX、endY -これらのdoubleプロパティは、グラデーションの終点のxおよびy座標を表します。
  • cycleMethod -この引数は、開始点と終了点で定義されたカラーグラデーション境界の外側の領域を塗りつぶす方法を定義します。
  • 比例-これはブール変数です。このプロパティを true に設定すると、開始位置と終了位置が比率に設定されます。
  • ストップ-この引数は、グラデーションラインに沿ったカラーストップポイントを定義します。
//Setting the linear gradient
Stop[] stops = new Stop[] {
   new Stop(0, Color.DARKSLATEBLUE),
   new Stop(1, Color.DARKRED)
};
LinearGradient linearGradient =
   new LinearGradient(0, 0, 1, 0, true, CycleMethod.NO_CYCLE, stops);

以下は、JavaFXのノードにグラデーションパターンを適用する方法を示す例です。 ここでは、円とテキストノードを作成し、それらに線形グラデーションパターンを適用しています。

このコードを LinearGradientExample.java という名前のファイルに保存します。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;

import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;

import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;

public class LinearGradientExample extends Application {
   @Override
   public void start(Stage stage) {
     //Drawing a Circle
      Circle circle = new Circle();

     //Setting the properties of the circle
      circle.setCenterX(300.0f);
      circle.setCenterY(180.0f);
      circle.setRadius(90.0f);

     //Drawing a text
      Text text = new Text("This is a colored circle");

     //Setting the font of the text
      text.setFont(Font.font("Edwardian Script ITC", 55));

     //Setting the position of the text
      text.setX(140);
      text.setY(50);

     //Setting the linear gradient
      Stop[] stops = new Stop[] {
         new Stop(0, Color.DARKSLATEBLUE),
         new Stop(1, Color.DARKRED)
      };
      LinearGradient linearGradient =
         new LinearGradient(0, 0, 1, 0, true, CycleMethod.NO_CYCLE, stops);

     //Setting the linear gradient to the circle and text
      circle.setFill(linearGradient);
      text.setFill(linearGradient);

     //Creating a Group object
      Group root = new Group(circle, text);

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

     //Setting title to the Stage
      stage.setTitle("Linear Gradient Example");

     //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 LinearGradientExample.java
java LinearGradientExample

実行すると、上記のプログラムは次のようにJavaFXウィンドウを生成します-

線形グラデーション

放射状グラデーションパターンの適用

放射状グラデーションパターンをノードに適用するには、 GradientPattern クラスをインスタンス化し、そのオブジェクトを* setFill()、setStroke()*メソッドに渡します。

このクラスのコンストラクタはいくつかのパラメータを受け入れますが、そのうちのいくつかは-

  • startX、startY -これらのdoubleプロパティは、グラデーションの開始点のxおよびy座標を表します。
  • endX、endY -これらのdoubleプロパティは、グラデーションの終点のxおよびy座標を表します。
  • cycleMethod -この引数は、カラーグラデーション境界の外側の領域が開始点と終了点によってどのように定義され、どのように塗りつぶされるべきかを定義します。
  • 比例-これはブール変数です。このプロパティを true に設定すると、開始位置と終了位置が比率に設定されます。
  • ストップ-この引数は、グラデーションラインに沿ったカラーストップポイントを定義します。
//Setting the radial gradient
Stop[] stops = new Stop[] {
   new Stop(0.0, Color.WHITE),
   new Stop(0.3, Color.RED),
   new Stop(1.0, Color.DARKRED)
};

RadialGradient radialGradient =
   new RadialGradient(0, 0, 300, 178, 60, false, CycleMethod.NO_CYCLE, stops);

以下は、JavaFXのノードに放射状のグラデーションパターンを適用する方法を示す例です。 ここでは、円とテキストノードを作成し、それらにグラデーションパターンを適用しています。

このコードを RadialGradientExample.java という名前のファイルに保存します。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;

import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.RadialGradient;
import javafx.scene.paint.Stop;

import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;

public class RadialGradientExample extends Application {
   @Override
   public void start(Stage stage) {
     //Drawing a Circle
      Circle circle = new Circle();

     //Setting the properties of the circle
      circle.setCenterX(300.0f);
      circle.setCenterY(180.0f);
      circle.setRadius(90.0f);

     //Drawing a text
      Text text = new Text("This is a colored circle");

     //Setting the font of the text
      text.setFont(Font.font("Edwardian Script ITC", 50));

     //Setting the position of the text
      text.setX(155);
      text.setY(50);

     //Setting the radial gradient
      Stop[] stops = new Stop[] {
         new Stop(0.0, Color.WHITE),
         new Stop(0.3, Color.RED),
         new Stop(1.0, Color.DARKRED)
      };
      RadialGradient radialGradient =
         new RadialGradient(0, 0, 300, 178, 60, false, CycleMethod.NO_CYCLE, stops);

     //Setting the radial gradient to the circle and text
      circle.setFill(radialGradient);
      text.setFill(radialGradient);

     //Creating a Group object
      Group root = new Group(circle, text);

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

     //Setting title to the Stage
      stage.setTitle("Radial Gradient Example");

     //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 RadialGradientExample.java
java RadialGradientExample

実行すると、上記のプログラムは次のようにJavaFXウィンドウを生成します-

放射状グラデーション

JavaFX-画像

パッケージ javafx.scene.image でJavaFXが提供するクラスを使用して、イメージをロードおよび変更できます。 JavaFXは、 Bmp、Gif、Jpeg、Png などの画像形式をサポートしています。

この章では、画像をJavaFXにロードする方法、画像を複数のビューに投影する方法、画像のピクセルを変更する方法について説明します。

画像の読み込み

パッケージ javafx.scene.imageImage という名前のクラスをインスタンス化することにより、JavaFXにイメージをロードできます。

クラスのコンストラクタに、次のいずれかを渡す必要があります-

  • ロードする画像の InputStream オブジェクト、または
  • 画像のURLを保持する文字列変数。
//Passing FileInputStream object as a parameter
FileInputStream inputstream = new FileInputStream("C:\\images\\image.jpg");
Image image = new Image(inputstream);

//Loading image from URL
//Image image = new Image(new FileInputStream("url for the image));

画像をロードした後、 ImageView クラスをインスタンス化し、次のようにそのコンストラクタに画像を渡すことにより、画像のビューを設定することができます-

ImageView imageView = new ImageView(image);

以下は、JavaFXで画像をロードし、ビューを設定する方法を示す例です。

このコードを ImageExample.java という名前のファイルに保存します。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;

public class ImageExample extends Application {
   @Override
   public void start(Stage stage) throws FileNotFoundException {
     //Creating an image
      Image image = new Image(new FileInputStream("path of the image"));

     //Setting the image view
      ImageView imageView = new ImageView(image);

     //Setting the position of the image
      imageView.setX(50);
      imageView.setY(25);

     //setting the fit height and width of the image view
      imageView.setFitHeight(455);
      imageView.setFitWidth(500);

     //Setting the preserve ratio of the image view
      imageView.setPreserveRatio(true);

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

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

     //Setting title to the Stage
      stage.setTitle("Loading an image");

     //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 ImageExample.java
java ImageExample

実行すると、上記のプログラムは次のようにJavaFXウィンドウを生成します-

画像の読み込み

画像の複数のビュー

同じシーンの画像に複数のビューを設定することもできます。 次のプログラムは、JavaFXのシーン内の画像にさまざまなビューを設定する方法を示す例です。

このコードを MultipleViews.java という名前のファイルに保存します。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;

public class MultipleViews extends Application {
   @Override
   public void start(Stage stage) throws FileNotFoundException {
     //Creating an image
      Image image = new Image(new FileInputStream("file path"));

     //Setting the image view 1
      ImageView imageView1 = new ImageView(image);

     //Setting the position of the image
      imageView1.setX(50);
      imageView1.setY(25);

     //setting the fit height and width of the image view
      imageView1.setFitHeight(300);
      imageView1.setFitWidth(250);

     //Setting the preserve ratio of the image view
      imageView1.setPreserveRatio(true);

     //Setting the image view 2
      ImageView imageView2 = new ImageView(image);

     //Setting the position of the image
      imageView2.setX(350);
      imageView2.setY(25);

     //setting the fit height and width of the image view
      imageView2.setFitHeight(150);
      imageView2.setFitWidth(250);

     //Setting the preserve ratio of the image view
      imageView2.setPreserveRatio(true);

     //Setting the image view 3
      ImageView imageView3 = new ImageView(image);

     //Setting the position of the image
      imageView3.setX(350);
      imageView3.setY(200);

     //setting the fit height and width of the image view
      imageView3.setFitHeight(100);
      imageView3.setFitWidth(100);

     //Setting the preserve ratio of the image view
      imageView3.setPreserveRatio(true);

     //Creating a Group object
      Group root = new Group(imageView1, imageView2, imageView3);

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

     //Setting title to the Stage
      stage.setTitle("Multiple views of an image");

     //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 MultipleViews.java
java MultipleViews

実行すると、上記のプログラムは次のようにJavaFXウィンドウを生成します-

マルチビュー

ピクセルを書く

JavaFXは、画像のピクセルを読み書きするための PixelReader および PixelWriter クラスという名前のクラスを提供します。 WritableImage クラスは、書き込み可能なイメージを作成するために使用されます。

以下は、画像のピクセルを読み書きする方法を示す例です。 ここでは、画像の色の値を読み取り、それを暗くしています。

このコードを WritingPixelsExample.java という名前のファイルに保存します。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javafx.application.Application;

import javafx.scene.Group;
import javafx.scene.Scene;

import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.PixelReader;
import javafx.scene.image.PixelWriter;
import javafx.scene.image.WritableImage;

import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class WritingPixelsExample extends Application {
   @Override
   public void start(Stage stage) throws FileNotFoundException {
     //Creating an image
      Image image = new Image(new FileInputStream("C:\\images\\logo.jpg"));
      int width = (int)image.getWidth();
      int height = (int)image.getHeight();

     //Creating a writable image
      WritableImage wImage = new WritableImage(width, height);

     //Reading color from the loaded image
      PixelReader pixelReader = image.getPixelReader();

     //getting the pixel writer
      PixelWriter writer = wImage.getPixelWriter();

     //Reading the color of the image
      for(int y = 0; y < height; y++) {
         for(int x = 0; x < width; x++) {
           //Retrieving the color of the pixel of the loaded image
            Color color = pixelReader.getColor(x, y);

           //Setting the color to the writable image
            writer.setColor(x, y, color.darker());
         }
      }
     //Setting the view for the writable image
      ImageView imageView = new ImageView(wImage);

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

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

     //Setting title to the Stage
      stage.setTitle("Writing pixels ");

     //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 WritingPixelsExample.java
java WritingPixelsExample

実行すると、上記のプログラムは次のようにJavaFXウィンドウを生成します-

ピクセルの書き込み

JavaFX-3Dシェイプ

前の章で、XY平面に2D形状を描く方法を見てきました。 これらの2D形状に加えて、JavaFXを使用して他のいくつかの3D形状も描画できます。

3D形状

一般に、3D形状は、XYZ平面に描画できる幾何学的図形です。 これらには、 Cylinder、Sphere および Box が含まれます。

上記の各3D形状はクラスによって表され、これらのすべてのクラスはパッケージ javafx.scene.shape に属します。 Shape3D という名前のクラスは、JavaFXのすべての3次元形状の基本クラスです。

3Dシェイプを作成する

3次元形状を作成するには、する必要があります-

  • 必要な3D形状のそれぞれのクラスをインスタンス化します。
  • 3D形状のプロパティを設定します。
  • 3D形状オブジェクトをグループに追加します。

各クラスのインスタンス化

3次元の形状を作成するには、まず、それぞれのクラスをインスタンス化する必要があります。 たとえば、3Dボックスを作成する場合、次のようにBoxという名前のクラスをインスタンス化する必要があります-

Box box = new Box();

シェイプのプロパティを設定する

クラスをインスタンス化した後、setterメソッドを使用して形状のプロパティを設定する必要があります。

たとえば、3Dボックスを描画するには、その幅、高さ、深さを渡す必要があります。 次のように、それぞれのセッターメソッドを使用してこれらの値を指定できます-

//Setting the properties of the Box
box.setWidth(200.0);
box.setHeight(400.0);
box.setDepth(200.0);

シェイプオブジェクトをグループに追加する

最後に、以下に示すように、コンストラクターのパラメーターとして渡すことにより、図形のオブジェクトをグループに追加する必要があります。

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

次の表に、JavaFXが提供するさまざまな3D形状のリストを示します。

S.No Shape & Description
1

Box

直方体は、長さ(深さ)、、および*高さ*を持つ3次元形状です。

JavaFXでは、3次元ボックスは Box という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.shape に属します。

このクラスをインスタンス化することにより、JavaFXでBoxノードを作成できます。

このクラスには、doubleデータ型の3つのプロパティがあります-

  • width -ボックスの幅。
  • height -ボックスの高さ。
  • depth -ボックスの深さ。
2

Cylinder

シリンダーは、曲面で接続された2つの平行な(ほとんど円形の)ベースを持つ閉じたソリッドです。

これは、2つのパラメーター、つまり、円形ベースの*半径*とシリンダーの*高さ*によって記述されます。

JavaFXでは、シリンダーは Cylinder という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.shape に属します。

このクラスをインスタンス化することにより、JavaFXでシリンダーノードを作成できます。 このクラスには、doubleデータ型の2つのプロパティがあります-

  • height -シリンダーの高さ。
  • 半径-シリンダーの半径。
3

Sphere

球体は、3D空間内の特定のポイントからすべて同じ距離rにあるポイントのセットとして定義されます。 この距離rは球の半径であり、与えられた点は球の中心です。

JavaFXでは、球体は Sphere という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.shape に属します。

このクラスをインスタンス化することにより、JavaFXで球体ノードを作成できます。

このクラスには、doubleデータ型の radius という名前のプロパティがあります。 球体の半径を表します。

3Dオブジェクトのプロパティ

すべての3次元オブジェクトについて、Cull Face、Drawing Mode、Materialなどのさまざまなプロパティを設定できます。

次のセクションでは、3Dオブジェクトのプロパティについて説明します。

カルフェイス

一般に、カリングとは、形状の不適切な方向の部分(ビュー領域には表示されない)を削除することです。

Cull Faceプロパティは CullFace タイプであり、3D形状のCull Faceを表します。 以下に示すように、メソッド* setCullFace()*を使用して、形状のCull Faceを設定できます-

box.setCullFace(CullFace.NONE);

形状のストロークタイプは-

  • なし-カリングは実行されません(CullFace.NONE)。
  • Front -すべての正面向きのポリゴンがカリングされます。 (CullFace.FRONT)。
  • Back -すべての裏面ポリゴンがカリングされます。 (StrokeType.BACK)。

デフォルトでは、3次元形状のカリング面は「戻る」です。

次のプログラムは、球体のさまざまなカリング面を示す例です。 このコードを SphereCullFace.java という名前のファイルに保存します。

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

public class SphereCullFace extends Application {
   @Override
   public void start(Stage stage) {
     //Drawing Sphere1
      Sphere sphere1 = new Sphere();

     //Setting the radius of the Sphere
      sphere1.setRadius(50.0);

     //Setting the position of the sphere
      sphere1.setTranslateX(100);
      sphere1.setTranslateY(150);

     //setting the cull face of the sphere to front
      sphere1.setCullFace(CullFace.FRONT);

     //Drawing Sphere2
      Sphere sphere2 = new Sphere();

     //Setting the radius of the Sphere
      sphere2.setRadius(50.0);

     //Setting the position of the sphere
      sphere2.setTranslateX(300);
      sphere2.setTranslateY(150);

     //Setting the cull face of the sphere to back
      sphere2.setCullFace(CullFace.BACK);

     //Drawing Sphere3
      Sphere sphere3 = new Sphere();

     //Setting the radius of the Sphere
      sphere3.setRadius(50.0);

     //Setting the position of the sphere
      sphere3.setTranslateX(500);
      sphere3.setTranslateY(150);

     //Setting the cull face of the sphere to none
      sphere2.setCullFace(CullFace.NONE);

     //Creating a Group object
      Group root = new Group(sphere1, sphere2, sphere3);

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

     //Setting title to the Stage
      stage.setTitle("Drawing a Sphere");

     //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 SphereCullFace.java
java SphereCullFace

実行すると、上記のプログラムは、それぞれ次のように、カルフェイス値 FRONT、BACK および NONE を持つ3つの球体を表示するJavaFXウィンドウを生成します-

Cull Faces

描画モード

プロパティは DrawMode 型であり、現在の3D形状の描画に使用される描画モードを表します。 あなたは次のようにメソッドsetDrawMode()を使用して3D形状を描くために描画モードを選択することができます-

box.setDrawMode(DrawMode.FILL);

JavaFXでは、2つの描画モードを選択して3D形状を描画できます。

  • Fill -このモードは、2Dシェイプを描画して塗りつぶします(DrawMode.FILL)。
  • Line -このモードは、線を使用して3D形状を描画します(DrawMode.LINE)。

デフォルトでは、3次元形状の描画モードは塗りつぶしです。

次のプログラムは、3Dボックスのさまざまな描画モードを示す例です。 このコードを BoxDrawMode.java という名前のファイルに保存します。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.shape.Box;
import javafx.scene.shape.DrawMode;
import javafx.stage.Stage;

public class BoxDrawMode extends Application {
   @Override
   public void start(Stage stage) {
     //Drawing a Box
      Box box1 = new Box();

     //Setting the properties of the Box
      box1.setWidth(100.0);
      box1.setHeight(100.0);
      box1.setDepth(100.0);

     //Setting the position of the box
      box1.setTranslateX(200);
      box1.setTranslateY(150);
      box1.setTranslateZ(0);

     //Setting the drawing mode of the box
      box1.setDrawMode(DrawMode.LINE);

     //Drawing a Box
      Box box2 = new Box();

     //Setting the properties of the Box
      box2.setWidth(100.0);
      box2.setHeight(100.0);
      box2.setDepth(100.0);

     //Setting the position of the box
      box2.setTranslateX(450);//450
      box2.setTranslateY(150);//150
      box2.setTranslateZ(300);

     //Setting the drawing mode of the box
      box2.setDrawMode(DrawMode.FILL);

     //Creating a Group object
      Group root = new Group(box1, box2);

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

     //Setting camera
      PerspectiveCamera camera = new PerspectiveCamera(false);
      camera.setTranslateX(0);
      camera.setTranslateY(0);
      camera.setTranslateZ(0);
      scene.setCamera(camera);

     //Setting title to the Stage
      stage.setTitle("Drawing a Box");

     //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 BoxDrawMode.java
java BoxDrawMode

実行時に、上記のプログラムは、次のように、それぞれ描画モード値LINEおよびFILLの2つのボックスを表示するJavaFXウィンドウを生成します-

描画モード

素材

cull Faceプロパティのタイプは Material であり、3D形状のマテリアルの表面を選択するために使用されます。 次のようにメソッド* setCullFace()*を使用して、3D形状のマテリアルを設定できます-

cylinder.setMaterial(material);

このメソッドについて前述したように、タイプMaterialのオブジェクトを渡す必要があります。 パッケージ javafx.scene.paintPhongMaterial クラスはこのクラスのサブクラスであり、Phongシェーディングマテリアルを表す7つのプロパティを提供します。 これらのプロパティのセッターメソッドを使用して、これらすべてのタイプのマテリアルを3Dシェイプの表面に適用できます。

以下は、JavaFXで利用可能な素材の種類です-

  • bumpMap -これは、RGBイメージとして保存された法線マップを表します。
  • diffuseMap -これは拡散マップを表します。
  • selfIlluminationMap -これは、このPhongMaterialの自己照明マップを表します。
  • specularMap -これは、このPhongMaterialのスペキュラーマップを表します。
  • diffuseColor -これは、このPhongMaterialの拡散色を表します。
  • specularColor -これは、このPhongMaterialの鏡面反射色を表します。
  • specularPower -これは、このPhongMaterialの鏡面屈折力を表します。

デフォルトでは、3次元シェイプのマテリアルは、ライトグレーの拡散色を持つPhongMaterialです。

以下は、シリンダー上のさまざまなマテリアルを表示する例です。 このコードを CylinderMaterials.java という名前のファイルに保存します。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Cylinder;
import javafx.stage.Stage;

public class CylinderMaterials extends Application {
   @Override
   public void start(Stage stage) {
     //Drawing Cylinder1
      Cylinder cylinder1 = new Cylinder();

     //Setting the properties of the Cylinder
      cylinder1.setHeight(130.0f);
      cylinder1.setRadius(30.0f);

     //Setting the position of the Cylinder
      cylinder1.setTranslateX(100);
      cylinder1.setTranslateY(75);

     //Preparing the phong material of type bump map
      PhongMaterial material1 = new PhongMaterial();
      material1.setBumpMap(new Image
         ("http://www.finddevguides.com/images/tplogo.gif"));

     //Setting the bump map material to Cylinder1
      cylinder1.setMaterial(material1);

     //Drawing Cylinder2
      Cylinder cylinder2 = new Cylinder();

     //Setting the properties of the Cylinder
      cylinder2.setHeight(130.0f);
      cylinder2.setRadius(30.0f);

     //Setting the position of the Cylinder
      cylinder2.setTranslateX(200);
      cylinder2.setTranslateY(75);

     //Preparing the phong material of type diffuse map
      PhongMaterial material2 = new PhongMaterial();
      material2.setDiffuseMap(new Image
         ("http://www.finddevguides.com/images/tp-logo.gif"));

     //Setting the diffuse map material to Cylinder2
      cylinder2.setMaterial(material2);

     //Drawing Cylinder3
      Cylinder cylinder3 = new Cylinder();

     //Setting the properties of the Cylinder
      cylinder3.setHeight(130.0f);
      cylinder3.setRadius(30.0f);

     //Setting the position of the Cylinder
      cylinder3.setTranslateX(300);
      cylinder3.setTranslateY(75);

     //Preparing the phong material of type Self Illumination Map
      PhongMaterial material3 = new PhongMaterial();
      material3.setSelfIlluminationMap(new Image
         ("http://www.finddevguides.com/images/tp-logo.gif"));

     //Setting the Self Illumination Map material to Cylinder3
      cylinder3.setMaterial(material3);

     //Drawing Cylinder4
      Cylinder cylinder4 = new Cylinder();

     //Setting the properties of the Cylinder
      cylinder4.setHeight(130.0f);
      cylinder4.setRadius(30.0f);

     //Setting the position of the Cylinder
      cylinder4.setTranslateX(400);
      cylinder4.setTranslateY(75);

     //Preparing the phong material of type Specular Map
      PhongMaterial material4 = new PhongMaterial();
      material4.setSpecularMap(new Image
         ("http://www.finddevguides.com/images/tp-logo.gif"));

     //Setting the Specular Map material to Cylinder4
      cylinder4.setMaterial(material4);

     //Drawing Cylinder5
      Cylinder cylinder5 = new Cylinder();

     //Setting the properties of the Cylinder
      cylinder5.setHeight(130.0f);
      cylinder5.setRadius(30.0f);

     //Setting the position of the Cylinder
      cylinder5.setTranslateX(100);
      cylinder5.setTranslateY(300);

     //Preparing the phong material of type diffuse color
      PhongMaterial material5 = new PhongMaterial();
      material5.setDiffuseColor(Color.BLANCHEDALMOND);

     //Setting the diffuse color material to Cylinder5
      cylinder5.setMaterial(material5);

     //Drawing Cylinder6
      Cylinder cylinder6 = new Cylinder();

     //Setting the properties of the Cylinder
      cylinder6.setHeight(130.0f);
      cylinder6.setRadius(30.0f);

     //Setting the position of the Cylinder
      cylinder6.setTranslateX(200);
      cylinder6.setTranslateY(300);

     //Preparing the phong material of type specular color
      PhongMaterial material6 = new PhongMaterial();

     //setting the specular color map to the material
      material6.setSpecularColor(Color.BLANCHEDALMOND);

     //Setting the specular color material to Cylinder6
      cylinder6.setMaterial(material6);

     //Drawing Cylinder7
      Cylinder cylinder7 = new Cylinder();

     //Setting the properties of the Cylinder
      cylinder7.setHeight(130.0f);
      cylinder7.setRadius(30.0f);

     //Setting the position of the Cylinder
      cylinder7.setTranslateX(300);
      cylinder7.setTranslateY(300);

     //Preparing the phong material of type Specular Power
      PhongMaterial material7 = new PhongMaterial();
      material7.setSpecularPower(0.1);

     //Setting the Specular Power material to the Cylinder
      cylinder7.setMaterial(material7);

     //Creating a Group object
      Group root = new Group(cylinder1 ,cylinder2, cylinder3,
      cylinder4, cylinder5, cylinder6, cylinder7);

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

     //Setting camera
      PerspectiveCamera camera = new PerspectiveCamera(false);
      camera.setTranslateX(0);
      camera.setTranslateY(0);
      camera.setTranslateZ(-10);
      scene.setCamera(camera);

     //Setting title to the Stage
      stage.setTitle("Drawing a cylinder");

     //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 CylinderMaterials.java
java CylinderMaterials

上記のプログラムは、実行時に、次のスクリーンショットに示すように、マテリアル、バンプマップ、拡散マップ、自己照明マップ、スペキュラーマップ、拡散カラー、スペキュラーカラー、(BLANCHEDALMOND)スペキュラーパワーを持つ7つのシリンダーを表示するJavaFXウィンドウを生成します−

シリンダー素材

JavaFX-イベント処理

JavaFXでは、GUIアプリケーション、Webアプリケーション、およびグラフィカルアプリケーションを開発できます。 このようなアプリケーションでは、ユーザーがアプリケーション(ノード)と対話するたびに、イベントが発生したと言われます。

たとえば、ボタンをクリックする、マウスを動かす、キーボードから文字を入力する、リストから項目を選択する、ページをスクロールするなどのイベントが発生します。

イベントの種類

イベントは大きく次の2つのカテゴリに分類することができます-

  • フォアグラウンドイベント-ユーザーの直接的な対話を必要とするイベント。 これらは、グラフィカルユーザーインターフェイスのグラフィカルコンポーネントと対話する人の結果として生成されます。 たとえば、ボタンをクリックする、マウスを動かす、キーボードから文字を入力する、リストから項目を選択する、ページをスクロールするなど
  • バックグラウンドイベント-エンドユーザーの相互作用を必要とするイベントは、バックグラウンドイベントとして知られています。 バックグラウンドイベントの例は、オペレーティングシステムの中断、ハードウェアまたはソフトウェアの障害、タイマーの期限切れ、操作の完了です。

JavaFXのイベント

JavaFXは、さまざまなイベントを処理するためのサポートを提供します。 パッケージ javafx.eventEvent というクラスは、イベントの基本クラスです。

そのサブクラスのインスタンスはイベントです。 JavaFXは、さまざまなイベントを提供します。 それらの一部を以下にリストします。

  • マウスイベント-これは、マウスがクリックされたときに発生する入力イベントです。 MouseEvent という名前のクラスで表されます。 これには、マウスクリック、マウス押下、マウスリリース、マウス移動、マウス入力ターゲット、マウス終了ターゲットなどのアクションが含まれます。
  • キーイベント-これは、ノードでキーストロークが発生したことを示す入力イベントです。 KeyEvent という名前のクラスで表されます。 このイベントには、キーの押下、キーのリリース、キーの入力などのアクションが含まれます。
  • ドラッグイベント-これは、マウスがドラッグされたときに発生する入力イベントです。 DragEvent という名前のクラスで表されます。 入力されたドラッグ、ドロップされたドラッグ、入力されたターゲットのドラッグ、終了したターゲットのドラッグ、上にドラッグなどのアクションが含まれます
  • ウィンドウイベント-これは、ウィンドウの表示/非表示アクションに関連するイベントです。 WindowEvent という名前のクラスで表されます。 ウィンドウの非表示、ウィンドウの表示、ウィンドウの非表示、ウィンドウの表示などのアクションが含まれます。

イベント処理

イベント処理は、イベントを制御し、イベントが発生した場合に何をすべきかを決定するメカニズムです。 このメカニズムには、イベントが発生したときに実行されるイベントハンドラーと呼ばれるコードがあります。

JavaFXは、イベントを処理するハンドラーとフィルターを提供します。 JavaFXでは、すべてのイベントに-

  • ターゲット-イベントが発生したノード。 ターゲットは、ウィンドウ、シーン、およびノー​​ドです。
  • ソース-イベントが生成されるソースは、イベントのソースになります。 上記のシナリオでは、マウスがイベントのソースです。
  • Type -発生したイベントのタイプ。マウスイベントの場合–マウスが押された状態、マウスが離された状態がイベントのタイプです。

次のようにグループオブジェクトを使用して、サークル、停止、再生ボタンが挿入されたアプリケーションがあると仮定します-

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

再生ボタンをクリックすると、ソースはマウスになり、ターゲットノードは再生ボタンになり、生成されるイベントのタイプはマウスクリックになります。

JavaFXでのイベント処理のフェーズ

イベントが生成されるたびに、JavaFXは次のフェーズを経ます。

ルート建設

イベントが生成されるたびに、イベントのデフォルト/初期ルートは*イベントディスパッチチェーン*の構築によって決定されます。 ステージからソースノードへのパスです。

上記のシナリオで再生ボタンをクリックしたときに生成されるイベントのイベントディスパッチチェーンを次に示します。

再生ボタン

イベントキャプチャフェーズ

イベントディスパッチチェーンの構築後、アプリケーションのルートノードがイベントをディスパッチします。 このイベントは、ディスパッチチェーン内のすべてのノード(上から下)に移動します。 これらのノードのいずれかに、生成されたイベントに対して filter が登録されている場合、実行されます。 ディスパッチチェーン内のどのノードにも生成されたイベントのフィルターがない場合、ターゲットノードに渡され、最終的にターゲットノードがイベントを処理します。

イベントバブリングフェーズ

イベントバブリングフェーズでは、イベントはターゲットノードからステージノードに移動します(下から上)。 イベントディスパッチチェーン内のノードのいずれかに、生成されたイベント用に登録された handler がある場合、実行されます。 これらのノードにイベントを処理するハンドラがない場合、イベントはルートノードに到達し、最終的にプロセスが完了します。

イベントハンドラーとフィルター

イベントフィルターとハンドラーは、イベントを処理するアプリケーションロジックを含むものです。 ノードは、複数のハンドラー/フィルターに登録できます。 親子ノードの場合、共通のフィルター/ハンドラーを親に提供できます。これは、すべての子ノードのデフォルトとして処理されます。

前述のように、イベント中の処理は実行されるフィルターであり、イベントバブリングフェーズ中はハンドラーが実行されます。 すべてのハンドラーとフィルターは、パッケージ javafx.eventEventHandler インターフェースを実装します。

イベントフィルターの追加と削除

イベントフィルターをノードに追加するには、 Node クラスの* addEventFilter()*メソッドを使用してこのフィルターを登録する必要があります。

//Creating the mouse event handler
EventHandler<MouseEvent> eventHandler = new EventHandler<MouseEvent>() {
   @Override
   public void handle(MouseEvent e) {
      System.out.println("Hello World");
      circle.setFill(Color.DARKSLATEBLUE);
   }
};
//Adding event Filter
Circle.addEventFilter(MouseEvent.MOUSE_CLICKED, eventHandler);

同様に、以下に示すようにメソッドremoveEventFilter()を使用してフィルターを削除することができます-

circle.removeEventFilter(MouseEvent.MOUSE_CLICKED, eventHandler);

イベント処理の例

以下は、イベントフィルターを使用したJavaFXでのイベント処理を示す例です。 このコードを EventFiltersExample.java という名前のファイルに保存します。

import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.EventHandler;

import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;

import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class EventFiltersExample extends Application {
   @Override
   public void start(Stage stage) {
     //Drawing a Circle
      Circle circle = new Circle();

     //Setting the position of the circle
      circle.setCenterX(300.0f);
      circle.setCenterY(135.0f);

     //Setting the radius of the circle
      circle.setRadius(25.0f);

     //Setting the color of the circle
      circle.setFill(Color.BROWN);

     //Setting the stroke width of the circle
      circle.setStrokeWidth(20);

     //Setting the text
      Text text = new Text("Click on the circle to change its color");

     //Setting the font of the text
      text.setFont(Font.font(null, FontWeight.BOLD, 15));

     //Setting the color of the text
      text.setFill(Color.CRIMSON);

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

     //Creating the mouse event handler
      EventHandler<MouseEvent> eventHandler = new EventHandler<MouseEvent>() {
         @Override
         public void handle(MouseEvent e) {
            System.out.println("Hello World");
            circle.setFill(Color.DARKSLATEBLUE);
         }
      };
     //Registering the event filter
      circle.addEventFilter(MouseEvent.MOUSE_CLICKED, eventHandler);

     //Creating a Group object
      Group root = new Group(circle, text);

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

     //Setting the fill color to the scene
      scene.setFill(Color.LAVENDER);

     //Setting title to the Stage
      stage.setTitle("Event Filters Example");

     //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 EventFiltersExample.java
java EventFiltersExample

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

色の変更

イベントハンドラーの追加と削除

ノードにイベントハンドラーを追加するには、以下に示すように、 Node クラスの* addEventHandler()*メソッドを使用してこのハンドラーを登録する必要があります。

//Creating the mouse event handler
EventHandler<javafx.scene.input.MouseEvent> eventHandler =
   new EventHandler<javafx.scene.input.MouseEvent>() {

   @Override
   public void handle(javafx.scene.input.MouseEvent e) {
      System.out.println("Hello World");
      circle.setFill(Color.DARKSLATEBLUE);
   }
};
//Adding the event handler
circle.addEventHandler(javafx.scene.input.MouseEvent.MOUSE_CLICKED, eventHandler);

同様に、以下に示すようにメソッドremoveEventHandler()を使用してイベントハンドラを削除することができます-

circle.removeEventHandler(MouseEvent.MOUSE_CLICKED, eventHandler);

次のプログラムは、イベントハンドラーを使用したJavaFXでのイベント処理を示す例です。

このコードを EventHandlersExample.java という名前のファイルに保存します。

import javafx.animation.RotateTransition;
import javafx.application.Application;
import javafx.event.EventHandler;

import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;

import javafx.scene.shape.Box;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.scene.transform.Rotate;
import javafx.stage.Stage;
import javafx.util.Duration;

public class EventHandlersExample extends Application {

   @Override
   public void start(Stage stage) {
     //Drawing a Box
      Box box = new Box();

     //Setting the properties of the Box
      box.setWidth(150.0);
      box.setHeight(150.0);
      box.setDepth(100.0);

     //Setting the position of the box
      box.setTranslateX(350);
      box.setTranslateY(150);
      box.setTranslateZ(50);

     //Setting the text
      Text text = new Text("Type any letter to rotate the box,
         and click on the box to stop the rotation");

     //Setting the font of the text
      text.setFont(Font.font(null, FontWeight.BOLD, 15));

     //Setting the color of the text
      text.setFill(Color.CRIMSON);

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

     //Setting the material of the box
      PhongMaterial material = new PhongMaterial();
      material.setDiffuseColor(Color.DARKSLATEBLUE);

     //Setting the diffuse color material to box
      box.setMaterial(material);

     //Setting the rotation animation to the box
      RotateTransition rotateTransition = new RotateTransition();

     //Setting the duration for the transition
      rotateTransition.setDuration(Duration.millis(1000));

     //Setting the node for the transition
      rotateTransition.setNode(box);

     //Setting the axis of the rotation
      rotateTransition.setAxis(Rotate.Y_AXIS);

     //Setting the angle of the rotation
      rotateTransition.setByAngle(360);

     //Setting the cycle count for the transition
      rotateTransition.setCycleCount(50);

     //Setting auto reverse value to false
      rotateTransition.setAutoReverse(false);

     //Creating a text filed
      TextField textField = new TextField();

     //Setting the position of the text field
      textField.setLayoutX(50);
      textField.setLayoutY(100);

     //Handling the key typed event
      EventHandler<KeyEvent> eventHandlerTextField = new EventHandler<KeyEvent>() {
         @Override
         public void handle(KeyEvent event) {
           //Playing the animation
            rotateTransition.play();
         }
      };
     //Adding an event handler to the text feld
      textField.addEventHandler(KeyEvent.KEY_TYPED, eventHandlerTextField);

     //Handling the mouse clicked event(on box)
      EventHandler<javafx.scene.input.MouseEvent> eventHandlerBox =
         new EventHandler<javafx.scene.input.MouseEvent>() {

         @Override
         public void handle(javafx.scene.input.MouseEvent e) {
            rotateTransition.stop();
         }
      };
     //Adding the event handler to the box
      box.addEventHandler(javafx.scene.input.MouseEvent.MOUSE_CLICKED, eventHandlerBox);

     //Creating a Group object
      Group root = new Group(box, textField, text);

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

     //Setting camera
      PerspectiveCamera camera = new PerspectiveCamera(false);
      camera.setTranslateX(0);
      camera.setTranslateY(0);
      camera.setTranslateZ(0);
      scene.setCamera(camera);

     //Setting title to the Stage
      stage.setTitle("Event Handlers Example");

     //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 EventHandlersExample.java
java EventHandlersExample

実行すると、上記のプログラムは、以下に示すようにテキストフィールドと3Dボックスを表示するJavaFXウィンドウを生成します-

テキストフィールド

ここで、テキストフィールドに文字を入力すると、3Dボックスがx軸に沿って回転し始めます。 もう一度ボックスをクリックすると、回転が停止します。

イベント処理に便利なメソッドを使用する

JavaFXの一部のクラスは、イベントハンドラープロパティを定義します。 それぞれのセッターメソッドを使用してこれらのプロパティに値を設定することにより、イベントハンドラーに登録できます。 これらのメソッドは、便利なメソッドとして知られています。

これらのメソッドのほとんどは、Node、Scene、Windowなどのクラスに存在し、それらのすべてのサブクラスで使用できます。

たとえば、マウスイベントリスナーをボタンに追加するには、以下に示すように便利なメソッド* setOnMouseClicked()*を使用できます。

playButton.setOnMouseClicked((new EventHandler<MouseEvent>() {
   public void handle(MouseEvent event) {
      System.out.println("Hello World");
      pathTransition.play();
   }
}));

次のプログラムは、便利なメソッドを使用したJavaFXでのイベント処理を示す例です。

このコードを ConvinienceMethodsExample.java という名前のファイルに保存します。

import javafx.animation.PathTransition;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.EventHandler;

import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;

import javafx.scene.shape.Circle;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.stage.Stage;
import javafx.util.Duration;

public class ConvinienceMethodsExample extends Application {
   @Override
   public void start(Stage stage) {
     //Drawing a Circle
      Circle circle = new Circle();

     //Setting the position of the circle
      circle.setCenterX(300.0f);
      circle.setCenterY(135.0f);

     //Setting the radius of the circle
      circle.setRadius(25.0f);

     //Setting the color of the circle
      circle.setFill(Color.BROWN);

     //Setting the stroke width of the circle
      circle.setStrokeWidth(20);

     //Creating a Path
      Path path = new Path();

     //Moving to the staring point
      MoveTo moveTo = new MoveTo(208, 71);

     //Creating 1st line
      LineTo line1 = new LineTo(421, 161);

     //Creating 2nd line
      LineTo line2 = new LineTo(226,232);

     //Creating 3rd line
      LineTo line3 = new LineTo(332,52);

     //Creating 4th line
      LineTo line4 = new LineTo(369, 250);

     //Creating 5th line
      LineTo line5 = new LineTo(208, 71);

     //Adding all the elements to the path
      path.getElements().add(moveTo);
      path.getElements().addAll(line1, line2, line3, line4, line5);

     //Creating the path transition
      PathTransition pathTransition = new PathTransition();

     //Setting the duration of the transition
      pathTransition.setDuration(Duration.millis(1000));

     //Setting the node for the transition
      pathTransition.setNode(circle);

     //Setting the path for the transition
      pathTransition.setPath(path);

     //Setting the orientation of the path
      pathTransition.setOrientation(
         PathTransition.OrientationType.ORTHOGONAL_TO_TAN GENT);

     //Setting the cycle count for the transition
      pathTransition.setCycleCount(50);

     //Setting auto reverse value to true
      pathTransition.setAutoReverse(false);

     //Creating play button
      Button playButton = new Button("Play");
      playButton.setLayoutX(300);
      playButton.setLayoutY(250);

      circle.setOnMouseClicked (new EventHandler<javafx.scene.input.MouseEvent>() {
         @Override
         public void handle(javafx.scene.input.MouseEvent e) {
            System.out.println("Hello World");
            circle.setFill(Color.DARKSLATEBLUE);
         }
      });
      playButton.setOnMouseClicked((new EventHandler<MouseEvent>() {
         public void handle(MouseEvent event) {
            System.out.println("Hello World");
            pathTransition.play();
         }
      }));

     //Creating stop button
      Button stopButton = new Button("stop");
      stopButton.setLayoutX(250);
      stopButton.setLayoutY(250);

      stopButton.setOnMouseClicked((new EventHandler<MouseEvent>() {
         public void handle(MouseEvent event) {
            System.out.println("Hello World");
            pathTransition.stop();
         }
      }));
     //Creating a Group object
      Group root = new Group(circle, playButton, stopButton);

     //Creating a scene object
      Scene scene = new Scene(root, 600, 300);
      scene.setFill(Color.LAVENDER);

     //Setting title to the Stage
      stage.setTitle("Convenience Methods Example");

     //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 ConvinienceMethodsExample.java
java ConvinienceMethodsExample

実行時に、上記のプログラムは以下に示すようにJavaFXウィンドウを生成します。 ここで、再生ボタンをクリックしてアニメーションを開始し、停止ボタンをクリックしてアニメーションを停止します。

便利な方法

JavaFX-UIコントロール

すべてのユーザーインターフェイスは、次の3つの主要な側面を考慮します-

  • * UI要素*-これらは、ユーザーが最終的に表示および操作するコア視覚要素です。 JavaFXは、基本から複雑までさまざまな、広く使用されている一般的な要素の膨大なリストを提供します。これについては、このチュートリアルで説明します。
  • レイアウト-UI要素を画面上で整理する方法を定義し、GUI(グラフィカルユーザーインターフェイス)に最終的なルックアンドフィールを提供します。 この部分については、レイアウトの章で説明します。
  • 動作-これらは、ユーザーがUI要素と対話するときに発生するイベントです。 この部分については、イベント処理の章で説明します。

JavaFXは、パッケージ javafx.scene.control でいくつかのクラスを提供します。 さまざまなGUIコンポーネント(コントロール)を作成するために、JavaFXは日付ピッカー、ボタンテキストフィールドなどのいくつかのコントロールをサポートしています。

各コントロールはクラスで表されます。それぞれのクラスをインスタンス化して、コントロールを作成できます。

以下は、GUIがJavaFXを使用して設計されている間に一般的に使用されるコントロールのリストです。

S.No Control & Description
1

Label

Labelオブジェクトは、テキストを配置するためのコンポーネントです。

2

Button

このクラスはラベル付きボタンを作成します。

3

ColorPicker

ColorPickerは、ユーザーが色を操作および選択できるように設計されたコントロールのペインを提供します。

4

CheckBox

CheckBoxは、オン(true)またはオフ(false)状態にできるグラフィカルコンポーネントです。

5

RadioButton

RadioButtonクラスはグラフィカルコンポーネントであり、グループ内でON(真)またはOFF(偽)状態になります。

6

ListView

ListViewコンポーネントは、テキストアイテムのスクロールリストをユーザーに提示します。

7

TextField

TextFieldオブジェクトは、1行のテキストの編集を可能にするテキストコンポーネントです。

8

PasswordField

PasswordFieldオブジェクトは、パスワード入力専用のテキストコンポーネントです。

9

Scrollbar

Scrollbarコントロールは、ユーザーが値の範囲から選択できるようにするためのスクロールバーコンポーネントを表します。

10

FileChooser

FileChooserコントロールは、ユーザーがファイルを選択できるダイアログウィンドウを表します。

11

ProgressBar

タスクが完了に向かって進行すると、進行状況バーにタスクの完了率が表示されます。

12

Slider

スライダーを使用すると、ユーザーは制限された間隔内でノブをスライドさせることでグラフィカルに値を選択できます。

次のプログラムは、JavaFXでログインページを表示する例です。 ここでは、コントロール label、text field、password field および button を使用しています。

このコードを LoginPage.java という名前のファイルに保存します。

import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.geometry.Insets;
import javafx.geometry.Pos;

import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Text;
import javafx.scene.control.TextField;
import javafx.stage.Stage;

public class LoginPage extends Application {
   @Override
   public void start(Stage stage) {
     //creating label email
      Text text1 = new Text("Email");

     //creating label password
      Text text2 = new Text("Password");

     //Creating Text Filed for email
      TextField textField1 = new TextField();

     //Creating Text Filed for password
      PasswordField textField2 = new PasswordField();

     //Creating Buttons
      Button button1 = new Button("Submit");
      Button button2 = new Button("Clear");

     //Creating a Grid Pane
      GridPane gridPane = new GridPane();

     //Setting size for the pane
      gridPane.setMinSize(400, 200);

     //Setting the padding
      gridPane.setPadding(new Insets(10, 10, 10, 10));

     //Setting the vertical and horizontal gaps between the columns
      gridPane.setVgap(5);
      gridPane.setHgap(5);

     //Setting the Grid alignment
      gridPane.setAlignment(Pos.CENTER);

     //Arranging all the nodes in the grid
      gridPane.add(text1, 0, 0);
      gridPane.add(textField1, 1, 0);
      gridPane.add(text2, 0, 1);
      gridPane.add(textField2, 1, 1);
      gridPane.add(button1, 0, 2);
      gridPane.add(button2, 1, 2);

     //Styling nodes
      button1.setStyle("-fx-background-color: darkslateblue; -fx-text-fill: white;");
      button2.setStyle("-fx-background-color: darkslateblue; -fx-text-fill: white;");

      text1.setStyle("-fx-font: normal bold 20px 'serif' ");
      text2.setStyle("-fx-font: normal bold 20px 'serif' ");
      gridPane.setStyle("-fx-background-color: BEIGE;");

     //Creating a scene object
      Scene scene = new Scene(gridPane);

     //Setting title to the Stage
      stage.setTitle("CSS Example");

     //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 LoginPage.java
java LoginPage

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

CSSの例

次のプログラムは、* Date Picker、Radio Button、Toggle Button、Check Box、List View、Choice ListなどのJavaFXのコントロールを示す登録フォームの例です。

このコードを Registration.java という名前のファイルに保存します。

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

import javafx.geometry.Insets;
import javafx.geometry.Pos;

import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.DatePicker;
import javafx.scene.control.ListView;
import javafx.scene.control.RadioButton;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Text;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleGroup;
import javafx.scene.control.ToggleButton;
import javafx.stage.Stage;

public class Registration extends Application {
   @Override
   public void start(Stage stage) {
     //Label for name
      Text nameLabel = new Text("Name");

     //Text field for name
      TextField nameText = new TextField();

     //Label for date of birth
      Text dobLabel = new Text("Date of birth");

     //date picker to choose date
      DatePicker datePicker = new DatePicker();

     //Label for gender
      Text genderLabel = new Text("gender");

     //Toggle group of radio buttons
      ToggleGroup groupGender = new ToggleGroup();
      RadioButton maleRadio = new RadioButton("male");
      maleRadio.setToggleGroup(groupGender);
      RadioButton femaleRadio = new RadioButton("female");
      femaleRadio.setToggleGroup(groupGender);

     //Label for reservation
      Text reservationLabel = new Text("Reservation");

     //Toggle button for reservation
      ToggleButton Reservation = new ToggleButton();
      ToggleButton yes = new ToggleButton("Yes");
      ToggleButton no = new ToggleButton("No");
      ToggleGroup groupReservation = new ToggleGroup();
      yes.setToggleGroup(groupReservation);
      no.setToggleGroup(groupReservation);

     //Label for technologies known
      Text technologiesLabel = new Text("Technologies Known");

     //check box for education
      CheckBox javaCheckBox = new CheckBox("Java");
      javaCheckBox.setIndeterminate(false);

     //check box for education
      CheckBox dotnetCheckBox = new CheckBox("DotNet");
      javaCheckBox.setIndeterminate(false);

     //Label for education
      Text educationLabel = new Text("Educational qualification");

     //list View for educational qualification
      ObservableList<String> names = FXCollections.observableArrayList(
         "Engineering", "MCA", "MBA", "Graduation", "MTECH", "Mphil", "Phd");
      ListView<String> educationListView = new ListView<String>(names);

     //Label for location
      Text locationLabel = new Text("location");

     //Choice box for location
      ChoiceBox locationchoiceBox = new ChoiceBox();
      locationchoiceBox.getItems().addAll
         ("Hyderabad", "Chennai", "Delhi", "Mumbai", "Vishakhapatnam");

     //Label for register
      Button buttonRegister = new Button("Register");

     //Creating a Grid Pane
      GridPane gridPane = new GridPane();

     //Setting size for the pane
      gridPane.setMinSize(500, 500);

     //Setting the padding
      gridPane.setPadding(new Insets(10, 10, 10, 10));

     //Setting the vertical and horizontal gaps between the columns
      gridPane.setVgap(5);
      gridPane.setHgap(5);

     //Setting the Grid alignment
      gridPane.setAlignment(Pos.CENTER);

     //Arranging all the nodes in the grid
      gridPane.add(nameLabel, 0, 0);
      gridPane.add(nameText, 1, 0);

      gridPane.add(dobLabel, 0, 1);
      gridPane.add(datePicker, 1, 1);

      gridPane.add(genderLabel, 0, 2);
      gridPane.add(maleRadio, 1, 2);
      gridPane.add(femaleRadio, 2, 2);
      gridPane.add(reservationLabel, 0, 3);
      gridPane.add(yes, 1, 3);
      gridPane.add(no, 2, 3);

      gridPane.add(technologiesLabel, 0, 4);
      gridPane.add(javaCheckBox, 1, 4);
      gridPane.add(dotnetCheckBox, 2, 4);

      gridPane.add(educationLabel, 0, 5);
      gridPane.add(educationListView, 1, 5);

      gridPane.add(locationLabel, 0, 6);
      gridPane.add(locationchoiceBox, 1, 6);

      gridPane.add(buttonRegister, 2, 8);

     //Styling nodes
      buttonRegister.setStyle(
         "-fx-background-color: darkslateblue; -fx-textfill: white;");

      nameLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
      dobLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
      genderLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
      reservationLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
      technologiesLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
      educationLabel.setStyle("-fx-font: normal bold 15px 'serif' ");
      locationLabel.setStyle("-fx-font: normal bold 15px 'serif' ");

     //Setting the back ground color
      gridPane.setStyle("-fx-background-color: BEIGE;");

     //Creating a scene object
      Scene scene = new Scene(gridPane);

     //Setting title to the Stage
      stage.setTitle("Registration Form");

     //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 Registration.java
java Registration

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

登録フォーム

JavaFX-チャート

一般に、チャートはデータのグラフィカルな表現です。 *棒グラフ、円グラフ、折れ線グラフ、散布図などのデータを表すさまざまな種類のグラフがあります。

JavaFXは、さまざまな*円グラフ*および* XYグラフ*のサポートを提供します。 XY平面で表されるチャートには、* AreaChart、BarChart、BubbleChart、LineChart、ScatterChart、StackedAreaChart、StackedBarChartなどが含まれます。

各チャートはクラスによって表され、これらのチャートはすべてパッケージ javafx.scene.chart に属します。 Chart という名前のクラスはJavaFXのすべてのチャートの基本クラスであり、 XYChart はXY平面に描画されるすべてのチャートの基本クラスです。

グラフ

チャートを作成する

チャートを作成するには、する必要があります-

  • チャートの軸を定義する
  • それぞれのクラスをインスタンス化する
  • データを準備してチャートに渡す

各クラスのインスタンス化

チャートを作成するには、それぞれのクラスをインスタンス化します。 たとえば、折れ線グラフを作成する場合は、次のように Line という名前のクラスをインスタンス化する必要があります-

LineChart linechart = new LineChart(xAxis, yAxis);

上記のコードで見られるように、インスタンス化中に、チャートのX軸とY軸をそれぞれ表す2つのオブジェクトを渡す必要があります。

軸の定義

一般的に、チャートの軸は次のように表すことができます-

  • 人口、年齢、
  • 週の日数、国などのカテゴリ。

JavaFXでは、軸はX軸またはY軸を表す抽象クラスです。 次の図に示すように、各タイプの軸、つまり CategoryAxis および NumberAxis を定義する2つのサブクラスがあります-

軸の定義

カテゴリ軸-このクラスをインスタンス化することにより、各値がカテゴリを表すXまたはY軸を定義(作成)できます。 以下に示すように、このクラスをインスタンス化することにより、カテゴリ軸を定義できます-

CategoryAxis xAxis = new CategoryAxis();

この軸に、あなたは以下に示すように軸のカテゴリとラベルのリストを設定する必要があります-

//setting the list of categories.
xAxis.setCategories(FXCollections.<String>observableArrayList
   (Arrays.asList("n ame1", "name2"….)));

//Setting label to the axis
xAxis.setLabel("name of the axis ");
*NumberAxis* -このクラスをインスタンス化することにより、各値が数値を表すXまたはY軸を定義(作成)できます。 この *Axis、Long、Double、BigDecimal* などで任意のNumberタイプを使用できます。 次のようにこのクラスをインスタンス化することにより、数値軸を定義できます-
//Defining the axis
NumberAxis yAxis = new NumberAxis();

//Setting labelto the axis
yAxis.setLabel("name of the axis");

XYチャートへのデータの受け渡し

すべてのXYチャートは、XY平面に沿って表されます。 チャートに一連のポイントをプロットするには、一連のXY座標を指定する必要があります。

*javafx.scene.chart* パッケージの *<X、Y>* クラスは、データをチャートに送信できるクラスです。 このクラスは、名前付きシリーズの監視可能なリストを保持します。 以下に示すように、 *XYChart.Series* クラスの* getData()*メソッドを使用して、このリストを取得できます-
ObservableList list = series.getData();

ここで、 seriesXYChart.Series クラスのオブジェクトです。 次のように* add()*メソッドを使用して、このリストにデータを追加できます-

list.add(new XYChart.Data(x-axis data, y-axis data));

これらの2行は、以下に示すように一緒に書くことができます-

series.getData().add(new XYChart.Data(x-axis data, y-axis data));

次の表は、JavaFXが提供するさまざまなチャート(クラス)の説明です-

S.No Chart & Description
1

Pie Chart

円グラフは、異なる色の円のスライスとしての値の表現です。 これらのスライスにはラベルが付けられ、各スライスに対応する値がチャートに表示されます。

JavaFXでは、円グラフは PieChart という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.chart に属します。

2

Line Chart

折れ線グラフまたは折れ線グラフは、直線セグメントで接続された一連のデータポイント(マーカー)として情報を表示します。 折れ線グラフは、同じ時間頻度でデータがどのように変化するかを示しています。

JavaFXでは、折れ線グラフは LineChart という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.chart に属します。 このクラスをインスタンス化することにより、JavaFXでLineChartノードを作成できます。

3

Area Chart

エリアチャートは、エリアベースのチャートを描画するために使用されます。 与えられた一連の点と軸の間の面積をプロットします。 一般に、このチャートは2つの量を比較するために使用されます。

JavaFXでは、面グラフは AreaChart という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.chart に属します。 このクラスをインスタンス化することにより、JavaFXでAreaChartノードを作成できます。

4

Bar Chart

棒グラフは、長方形の棒を使用してグループ化されたデータを表すために使用されます。 これらのバーの長さは値を表します。 棒グラフの棒は、垂直または水平にプロットできます。

JavaFXでは、棒グラフは BarChart という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.chart に属します。 このクラスをインスタンス化することにより、JavaFXでBarChartノードを作成できます。

5

Bubble Chart

バブルチャートを使用して、3次元データを作成します。 3番目の次元は、バブルのサイズ(半径)で表されます。

JavaFXでは、バブルチャートは BubbleChart という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.chart に属します。 このクラスをインスタンス化することにより、JavaFXでBubbleChartノードを作成できます。

6

Scatter Chart

散布図は、デカルト平面にプロットされた2つの変数の値を使用する一種のグラフです。 通常、2つの変数間の関係を見つけるために使用されます。

JavaFXでは、散布図は ScatterChart という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.chart に属します。 このクラスをインスタンス化することにより、JavaFXでScatterChartノードを作成できます。

7

Stacked Area Chart

JavaFXでは、積み上げ面グラフは StackedAreaChart という名前のクラスで表されます。

このクラスは、パッケージ javafx.scene.chart に属します。 このクラスをインスタンス化することにより、JavaFXでStackedAreaChartノードを作成できます。

8

Stacked Bar Chart

JavaFXでは、積み上げ棒グラフは StackedBarChart という名前のクラスで表されます。

このクラスは、パッケージ javafx.scene.chart に属します。 このクラスをインスタンス化することにより、JavaFXでStackedBarChartノードを作成できます。

JavaFX-レイアウトペイン(コンテナ)

シーンに必要なすべてのノードを構築した後、通常、それらを順番に配置します。

コンテナ内のコンポーネントのこの配置は、コンテナのレイアウトと呼ばれます。 また、コンテナ内の特定の位置にすべてのコンポーネントを配置することも含まれているため、レイアウトに従っていると言えます。

JavaFXは、 HBox、VBox、Border Pane、Stack Pane、Text Flow、Anchor Pane、Title Pane、Grid Pane、Flow Panel などのいくつかの定義済みレイアウトを提供します。

上記の各レイアウトはクラスによって表され、これらのクラスはすべてパッケージ javafx.layout に属します。 Pane という名前のクラスは、JavaFXのすべてのレイアウトの基本クラスです。

レイアウトを作成する

レイアウトを作成するには、する必要があります-

  • ノードを作成します。
  • 必要なレイアウトのそれぞれのクラスをインスタンス化します。
  • レイアウトのプロパティを設定します。
  • 作成したすべてのノードをレイアウトに追加します。

ノードを作成する

まず、それぞれのクラスをインスタンス化して、JavaFXアプリケーションの必要なノードを作成します。

たとえば、テキストボックスと2つのボタン、つまりHBoxレイアウトでの再生と停止が必要な場合は、次のコードブロックに示すように、最初にこれらのノードを作成する必要があります-

//Creating a text field
TextField textField = new TextField();

//Creating the play button
Button playButton = new Button("Play");

//Creating the stop button
Button stopButton = new Button("stop");

各クラスのインスタンス化

ノードを作成した後(およびそれらに対するすべての操作を完了した後)、必要なレイアウトのクラスをインスタンス化します。

たとえば、Hboxレイアウトを作成する場合は、次のようにこのクラスをインスタンス化する必要があります。

HBox hbox = new HBox();

レイアウトのプロパティを設定する

クラスをインスタンス化した後、それぞれのセッターメソッドを使用してレイアウトのプロパティを設定する必要があります。

例-HBoxレイアウトで作成されたノード間にスペースを設定する場合は、spacingという名前のプロパティに値を設定する必要があります。 これは、以下に示すように、セッターメソッド* setSpacing()*を使用して行うことができます-

hbox.setSpacing(10);

シェイプオブジェクトをグループに追加する

最後に、以下に示すように、コンストラクターのパラメーターとして渡すことにより、図形のオブジェクトをグループに追加する必要があります。

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

レイアウトペイン

以下は、JavaFXが提供するさまざまなレイアウトペイン(クラス)です。 これらのクラスは、パッケージ javafx.scene.layout に存在します。

S.No Shape & Description
1

HBox

HBoxレイアウトは、アプリケーション内のすべてのノードを単一の水平行に配置します。

パッケージ javafx.scene.layoutHBox という名前のクラスは、テキストの水平ボックスレイアウトを表します。

2

VBox

VBoxレイアウトは、アプリケーション内のすべてのノードを単一の垂直列に配置します。

パッケージ javafx.scene.layoutVBox という名前のクラスは、テキストの垂直ボックスレイアウトを表します。

3

BorderPane

Border Paneレイアウトは、アプリケーション内のノードを上下左右に配置します。

パッケージ javafx.scene.layoutBorderPane という名前のクラスは、境界ペインレイアウトを表します。

4

StackPane

スタックペインレイアウトは、アプリケーションのノードをスタックのように別のノードの上に配置します。 最初に追加されたノードはスタックの下部に配置され、次のノードはスタックの上部に配置されます。

パッケージ javafx.scene.layoutStackPane というクラスは、スタックペインレイアウトを表します。

5

TextFlow

テキストフローレイアウトは、単一のフローに複数のテキストノードを配置します。

パッケージ javafx.scene.layoutTextFlow という名前のクラスは、テキストフローレイアウトを表します。

6

AnchorPane

アンカーペインレイアウトは、ペインから特定の距離にあるアプリケーションのノードを固定します。

パッケージ javafx.scene.layoutAnchorPane という名前のクラスは、アンカーペインレイアウトを表します。

7

TilePane

タイルペインレイアウトは、アプリケーションのすべてのノードを均一なサイズのタイルの形式で追加します。

パッケージ javafx.scene.layoutTilePane という名前のクラスは、TilePaneレイアウトを表します。

8

GridPane

グリッドペインレイアウトは、アプリケーション内のノードを行と列のグリッドとして配置します。 このレイアウトは、JavaFXを使用してフォームを作成するときに便利です。

パッケージ javafx.scene.layoutGridPane という名前のクラスは、GridPaneレイアウトを表します。

9

FlowPane

フローペインのレイアウトは、フロー内のすべてのノードをラップします。 水平フローペインはペインの要素をその高さでラップし、垂直フローペインは要素をその幅でラップします。

パッケージ javafx.scene.layoutFlowPane という名前のクラスは、フローペインレイアウトを表します。

JavaFX-CSS

*Cascading Style Sheets* (CSSとも呼ばれる)は、Webページを表示可能にするプロセスを簡素化することを目的としたシンプルなデザイン言語です。

CSSは、Webページのルックアンドフィールの部分を処理します。 CSSを使用すると、テキストの色、フォントのスタイル、段落間の間隔、列のサイズ、レイアウトを制御できます。 これらとは別に、使用する背景画像や色、レイアウト設計、さまざまなデバイスや画面サイズの表示のバリエーション、およびその他のさまざまな効果も制御できます。

JavaFXのCSS

JavaFXは、CSSを使用してアプリケーションのルックアンドフィールを強化する機能を提供します。 パッケージ javafx.css には、JavaFXアプリケーションにCSSを適用するために使用されるクラスが含まれています。

CSSは、ブラウザによって解釈され、ドキュメント内の対応する要素に適用されるスタイルルールで構成されます。

スタイルルールは3つの部分で構成されています-

  • セレクタ-セレクタは、スタイルが適用されるHTMLタグです。 これには、 <h1><table> などのタグを使用できます。
  • プロパティ-プロパティは、HTMLタグの属性の一種です。 簡単に言えば、すべてのHTML属性はCSSプロパティに変換されます。 色、*ボーダー*などです。
  • -値はプロパティに割り当てられます。 たとえば、色のプロパティは red または*#F1F1F1 *などの値を持つことができます。

次のようにCSSスタイルルールの構文を置くことができます-

selector { property: value }

CSSスタイル

JavaFXで使用されるデフォルトのスタイルシートは modena.css です。 JavaFXランタイムjarにあります。

独自のスタイルシートを追加する

次のように、JavaFXのシーンに独自のスタイルシートを追加できます-

Scene scene = new Scene(new Group(), 500, 400);
scene.getStylesheets().add("path/stylesheet.css");

インラインスタイルシートの追加

  • setStyle()*メソッドを使用してインラインスタイルを追加することもできます。 これらのスタイルはキーと値のペアのみで構成され、それらが設定されているノードに適用できます。 以下は、インラインスタイルシートをボタンに設定するサンプルコードです。
.button {
   -fx-background-color: red;
   -fx-text-fill: white;
}

テキストフィールド、パスワードフィールド、2つのボタンを持つフォームを表示するJavaFXアプリケーションを開発したと仮定します。 デフォルトでは、このフォームは次のスクリーンショットに示すように見えます-

グリッドペイン

次のプログラムは、JavaFXで上記のアプリケーションにスタイルを追加する方法を示す例です。

このコードを CssExample.java という名前のファイルに保存します

import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Text;
import javafx.scene.control.TextField;
import javafx.stage.Stage;

public class CssExample extends Application {
   @Override
   public void start(Stage stage) {
     //creating label email
      Text text1 = new Text("Email");

     //creating label password
      Text text2 = new Text("Password");

     //Creating Text Filed for email
      TextField textField1 = new TextField();

     //Creating Text Filed for password
      PasswordField textField2 = new PasswordField();

     //Creating Buttons
      Button button1 = new Button("Submit");
      Button button2 = new Button("Clear");

     //Creating a Grid Pane
      GridPane gridPane = new GridPane();

     //Setting size for the pane
      gridPane.setMinSize(400, 200);

     //Setting the padding
      gridPane.setPadding(new Insets(10, 10, 10, 10));

     //Setting the vertical and horizontal gaps between the columns
      gridPane.setVgap(5);
      gridPane.setHgap(5);

     //Setting the Grid alignment
      gridPane.setAlignment(Pos.CENTER);

     //Arranging all the nodes in the grid
      gridPane.add(text1, 0, 0);
      gridPane.add(textField1, 1, 0);
      gridPane.add(text2, 0, 1);
      gridPane.add(textField2, 1, 1);
      gridPane.add(button1, 0, 2);
      gridPane.add(button2, 1, 2);

     //Styling nodes
      button1.setStyle("-fx-background-color: darkslateblue; -fx-text-fill: white;");
      button2.setStyle("-fx-background-color: darkslateblue; -fx-text-fill: white;");

      text1.setStyle("-fx-font: normal bold 20px 'serif' ");
      text2.setStyle("-fx-font: normal bold 20px 'serif' ");
      gridPane.setStyle("-fx-background-color: BEIGE;");

     //Creating a scene object
      Scene scene = new Scene(gridPane);

     //Setting title to the Stage
      stage.setTitle("CSS Example");

     //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 CssExample.java
java CssExample

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

CSSの例