Javafx Tutorial PDF
Javafx Tutorial PDF
To develop GUI Applications using Java programming language, the programmers rely on
libraries such as Advanced Windowing Toolkit and Swings. After the advent of JavaFX, these
Java programmers can now develop GUI applications effectively with rich content.
In this tutorial, we will discuss all the necessary elements of JavaFX that you can use to develop
effective Rich Internet Applications.
Audience
This tutorial has been prepared for beginners who want to develop Rich Internet Applications
using JavaFX.
Prerequisites
For this tutorial, it is assumed that the readers have a prior knowledge of Java programming
language.
All the content and graphics published in this e-book are the property of Tutorials Point (I) Pvt.
Ltd. The user of this e-book is prohibited to reuse, retain, copy, distribute or republish any
contents or a part of contents of this e-book in any manner without written consent of the
publisher.
We strive to update the contents of our website and tutorials as timely and as precisely as
possible, however, the contents may contain inaccuracies or errors. Tutorials Point (I) Pvt. Ltd.
provides no guarantee regarding the accuracy, timeliness or completeness of our website or its
contents including this tutorial. If you discover any errors on our website or in this tutorial,
please notify us at [email protected]
i
JavaFX
Table of Contents
About the Tutorial............................................................................................................................................... i
Audience ............................................................................................................................................................. i
Prerequisites ....................................................................................................................................................... i
1. JAVAFX OVERVIEW...................................................................................................................... 1
3. JAVAFX ARCHITECTURE............................................................................................................. 39
Prism .................................................................................................................................................................41
WebView ..........................................................................................................................................................41
ii
JavaFX
2D Shape ...........................................................................................................................................................62
2D Shapes Ellipse............................................................................................................................................83
iii
JavaFX
iv
JavaFX
Rotation ..........................................................................................................................................................255
Scaling.............................................................................................................................................................258
Translation ......................................................................................................................................................262
Shearing ..........................................................................................................................................................265
Stroke Transition.............................................................................................................................................284
PathTransition ................................................................................................................................................300
v
JavaFX
vi
JavaFX
HBox ...............................................................................................................................................................451
VBox ...............................................................................................................................................................453
BorderPane .....................................................................................................................................................456
StackPane .......................................................................................................................................................458
FlowPane ........................................................................................................................................................461
AnchorPane ....................................................................................................................................................464
TextFlow .........................................................................................................................................................467
TilePane ..........................................................................................................................................................470
GridPane .........................................................................................................................................................473
vii
1. JavaFX Overview JavaFX
Rich Internet Applications are those web applications which provide similar features
and experience as that of desktop applications. They offer a better visual experience when
compared to the normal web applications to the users. These applications are delivered as
browser plug-ins or as a virtual machine and are used to transform traditional static
applications into more enhanced, fluid, animated and engaging applications.
Unlike traditional desktop applications, RIAs dont require to have any additional software
to run. As an alternative, you should install software such as ActiveX, Java, Flash,
depending on the Application.
In an RIA, the graphical presentation is handled on the client side, as it has a plugin that
provides support for rich graphics. In a nutshell, data manipulation in an RIA is carried out
on the server side, while related object manipulation is carried out on the client side.
We have three main technologies using which we can develop an RIA. These include the
following:
Adobe Flash
Microsoft Silverlight
JavaFX
Adobe Flash
This software platform is developed by Adobe Systems and is used in creating Rich Internet
Applications. Along with these, you can also build other Applications such as
Vector, Animation, Browser Games, Desktop Applications, Mobile Applications and Games,
etc.
This is the most commonly used platform for developing and executing RIAs with a
desktop browser penetration rate of 96%.
Microsoft Silverlight
Just like Adobe flash, Microsoft Silverlight is also a software application framework for
developing as well as executing Rich Internet Applications. Initially this framework was
used for streaming media. The present versions support multimedia, graphics, and
animation as well.
This platform is rarely used with a desktop browser penetration rate of 66%.
JavaFX
JavaFX is a Java library using which you can develop Rich Internet Applications. By using
Java technology, these applications have a browser penetration rate of 76%.
1
JavaFX
What is JavaFX?
JavaFX is a Java library used to build Rich Internet Applications. The applications written
using this library can run consistently across multiple platforms. The applications
developed using JavaFX can run on various devices such as Desktop Computers, Mobile
Phones, TVs, Tablets, etc.
To develop GUI Applications using Java programming language, the programmers rely
on libraries such as Advanced Windowing Toolkit and Swings. After the advent of
JavaFX, these Java programmers can now develop GUI applications effectively with rich
content.
JavaFX provides a rich set of graphics and media APIs and it leverages the modern
Graphical Processing Unit through hardware accelerated graphics. JavaFX also provides
interfaces using which developers can combine graphics animation and UI control.
One can use JavaFX with JVM based technologies such as Java, Groovy and JRuby. If
developers opt for JavaFX, there is no need to learn additional technologies, as prior
knowledge of any of the above-mentioned technologies will be good enough to develop
RIAs using JavaFX.
Features of JavaFX
Following are some of the important features of JavaFX
Written in Java: The JavaFX library is written in Java and is available for the
languages that can be executed on a JVM, which include Java, Groovy and
JRuby. These JavaFX applications are also platform independent.
FXML: JavaFX features a language known as FXML, which is a HTML like declarative
markup language. The sole purpose of this language is to define a user Interface.
Built-in UI controls: JavaFX library caters UI controls using which we can develop
a full-featured application.
2
JavaFX
CSS like Styling: JavaFX provides a CSS like styling. By using this, you can
improve the design of your application with a simple knowledge of CSS.
Canvas and Printing API: JavaFX provides Canvas, an immediate mode style of
rendering API. Within the package javafx.scene.canvas it holds a set of classes
for canvas, using which we can draw directly within an area of the JavaFX scene.
JavaFX also provides classes for Printing purposes in the package javafx.print.
Rich set of APIs: JavaFX library provides a rich set of APIs to develop GUI
applications, 2D and 3D graphics, etc. This set of APIs also includes capabilities of
Java platform. Therefore, using this API, you can access the features of Java
languages such as Generics, Annotations, Multithreading, and Lambda Expressions.
The traditional Java Collections library was enhanced and concepts like observable
lists and maps were included in it. Using these, the users can observe the changes
in the data models.
History of JavaFX
JavaFX was originally developed by Chris Oliver, when he was working for a company
named See Beyond Technology Corporation, which was later acquired by Sun
Microsystems in the year 2005.
Initially this project was named as F3 (Form Follows Functions) and it was
developed with an intention to provide richer interfaces for developing GUI
Applications.
Sun Microsystems acquired the See Beyond company in June 2005, it adapted
the F3 project as JavaFX.
In the year 2007, JavaFX was announced officially at Java One, a world wide web
conference which is held yearly.
In the year 2008, Net Beans integrated with JavaFX was available. In the same
year, the Java Standard Development Kit for JavaFX 1.0 was released.
In the year 2009, Oracle Corporation acquired Sun Microsystems and in the same
year the next version of JavaFX (1.2) was released as well.
In the year 2010, JavaFX 1.3 came out and in the year 2011 JavaFX 2.0 was
released.
The latest version, JavaFX8, was released as an integral part of Java on 18th of
March 2014.
3
2. JavaFX Environment JavaFX
From Java8 onwards, the JDK (Java Development Kit) includes JavaFX library in it.
Therefore, to run JavaFX applications, you simply need to install Java8 or later version in
your system.
In addition to it, IDEs like Eclipse and NetBeans provide support for JavaFX. This chapter
teaches you how to set the environment to run JavaFX Applications in various ways.
Installing Java8
First of all, you will have to verify whether there is Java Installed in your system or not by
opening the command prompt and typing the command Java in it.
If you havent installed Java in your system, the command prompt displays the message
shown in the following screenshot.
4
JavaFX
Step 1: Visit the JavaSE Downloads Page, click on the JDK Download button as
highlighted in the following screenshot.
Step 2: On clicking the Download button, you will be redirected to the Java SE
Development Kit 8 Downloads page. This page provides you links of JDK for various
platforms.
Accept the license agreement and download the required software by clicking on its
respective link.
5
JavaFX
For example, if you are working on a windows 64-bit Operating System then you need to
download the JDK version highlighted in the following screenshot.
On clicking the highlighted link, the Java8 Development Kit suitable for Windows 64-bit
Operating System will be downloaded onto your system.
6
JavaFX
Step 3: Run the downloaded binary executable file to start the installation of JDK8.
7
JavaFX
Step 5: On selecting the destination folder and clicking Next, the JavaFX installation
process starts displaying the progress bar as shown in the following screenshot.
8
JavaFX
Step 6: Change the installation directory if needed, else keep the default ones and proceed
further.
9
JavaFX
Step 7: Finish the installation process by clicking the Close button as shown in the
following screenshot.
Now you can follow the steps that are given below.
Now, alter the 'Path' variable so that it also contains the path to the Java
executable. For Example, if the path is currently set to
'C:\WINDOWS\SYSTEM32', then change your path to read
'C:\WINDOWS\SYSTEM32; C:\Program Files\java\ jdk1.8.0_91\bin'.
10
JavaFX
11
JavaFX
Step 1: Visit the NetBeans website and click the Download button in order to download
the NetBeans software.
12
JavaFX
Step 2: On clicking Download, you will get to the Downloads page of the NetBeans
software, which provides NetBeans bundles for various Java applications. Download the
NetBeans software for JavaSE as shown in the following screenshot.
13
JavaFX
After completion of the configuration, you will see the Welcome Page of the installer.
14
JavaFX
Step 4: Click the Next button and proceed with the installation.
15
JavaFX
Step 5: The next window holds the NETBEANS IDE 8.0 license agreement. Read it
carefully and accept the agreement by checking the checkbox at I accept the terms in
the license agreement and then click the Next button.
16
JavaFX
Step 6: In the next window, you will encounter the license agreement for Junit, accept it
by selecting the radio button at I accept the terms in the license agreement, Install JUnit
and click on Next.
17
JavaFX
Step 7: Choose the destination directory where you need the Netbeans 8.0 to be installed.
Furthermore, you can also browse through the directory where Java Development Kit is
installed in your system and click on the Next button.
18
JavaFX
Step 8: Similarly, choose the destination directory for Glassfish Server installation.
Browse through the Java Development Kit directory (now for Glassfish Reference) and
then click Next.
19
JavaFX
Step 9: Check the Check for Updates box for automatic updates and click the Install
button to start the installation.
20
JavaFX
Step 10: This step starts the installation of NetBeans IDE 8.0 and it may take a while.
Step 11: Once the process is complete, click the Finish button to finish the installation.
21
JavaFX
Step 12: Once you launch the NetBeans IDE, you will see the start page as shown in the
following screenshot.
22
JavaFX
Step 13: In the file menu, select New Project to open the New project wizard as shown
in the following screenshot.
23
JavaFX
Step 14: In the New Project wizard, select JavaFX and click on Next. It starts creating
a new JavaFX Application for you.
24
JavaFX
Step 15: Select the name of the project and location of the project in the NewJavaFX
Application window and then click Finish. It creates a sample application with the given
name.
25
JavaFX
26
JavaFX
Step 16: Right-click on the file and select Run File to run this code as shown in the
following screenshot.
27
JavaFX
This automatically created program contains the code which generates a simple JavaFX
window having a button with the label Say Hello World in it. Every time you click on
this button, the string Hello World will be displayed on the console as shown below.
Once Eclipse is installed, follow the steps given below to install e(fx)clipse in your system.
28
JavaFX
Step 1: Open Eclipse in the Help menu and select Install New Software option as
shown below.
Upon clicking, it will display the Available Software window, as shown in the following
screenshot.
29
JavaFX
In the text box Work with of this window, you need to provide the link of the plugin for
the required software.
Step 2: Click the Add button. Provide the name of the plugin as e(fx)clipse. Next,
provide the following link as the location.
http://download.eclipse.org/efxclipse/updates-released/2.3.0/site
30
JavaFX
Step 3: After specifying the name and location of the plugin, click the OK button, as
highlighted in the following screenshot.
31
JavaFX
Step 4: Soon after you add the plugin, you will find two checkboxes for e(fx)clipse
install and e(fx)clipse single components. Check both these checkboxes and click
the Add button as shown in the following screenshot.
32
JavaFX
Step 5: Next, open your Eclipse IDE. Click the File menu and select Project as shown in
the following screenshot.
33
JavaFX
Step 6: Then, you will get a window where you can see a list of wizards provided by
Eclipse to create a project. Expand the JavaFX wizard, select JavaFX Project and click
the Next button as shown in the following screenshot.
34
JavaFX
Step 7: On clicking Next, a New Project Wizard opens. Here, you can type the required
project name and click Finish.
35
JavaFX
Step 8: On clicking Finish, an application is created with the given name (sample). In the
sub-package named application, a program with the name Main.java is generated as
shown below.
36
JavaFX
Step 9: This automatically generated program contains the code to generate an empty
JavaFX window. Right-click on this file, select Run As Java Application as shown in
the following screenshot.
37
JavaFX
On executing this application, it gives you an empty JavaFX window as shown below.
Note: We will discuss more about the code in the later chapters.
38
3. JavaFX Architecture JavaFX
JavaFX provides a complete API with a rich set of classes and interfaces to build GUI
applications with rich graphics. The important packages of this API are
javafx.event: Contains classes and interfaces to deliver and handle JavaFX events.
javafx.stage: This package holds the top level container classes for JavaFX
application.
javafx.scene: This package provides classes and interfaces to support the scene
graph. In addition, it also provides sub-packages such as canvas, chart, control,
effect, image, input, layout, media, paint, shape, text, transform, web, etc. There
are several components that support this rich API of JavaFX.
The following illustration shows the architecture of JavaFX API. Here you can see the
components that support JavaFX API.
39
JavaFX
Scene Graph
In JavaFX, the GUI Applications were coded using a Scene Graph. A Scene Graph is the
starting point of the construction of the GUI Application. It holds the (GUI) application
primitives that are termed as nodes.
Containers (layout panes) such as Border Pane, Grid Pane, Flow Pane, etc.
In general, a collection of nodes makes a scene graph. All these nodes are arranged in a
hierarchical order as shown below.
Each node in the scene graph has a single parent, and the node which does not contain
any parents is known as the root node.
In the same way, every node has one or more children, and the node without children is
termed as leaf node; a node with children is termed as a branch node.
A node instance can be added to a scene graph only once. The nodes of a scene graph can
have Effects, Opacity, Transforms, Event Handlers, Event Handlers, Application Specific
States.
40
JavaFX
Prism
Prism is a high performance hardwareaccelerated graphical pipeline that is used
to render the graphics in JavaFX. It can render both 2-D and 3-D graphics.
In case the hardware support for graphics on the system is not sufficient, then Prism uses
the software render path to process the graphics.
When used with a supported Graphic Card or GPU, it offers smoother graphics. Just in case
the system does not support a graphic card, then Prism defaults to the software rendering
stack (either of the above two).
Quantum Toolkit
It is an abstraction over the low-level components of Prism, Glass, Media Engine, and Web
Engine. It ties Prism and GWT together and makes them available to JavaFX.
WebView
Using JavaFX, you can also embed HTML content in to a scene graph. WebView is the
component of JavaFX which is used to process this content. It uses a technology called
Web Kit, which is an internal open-source web browser engine. This component supports
different web technologies like HTML5, CSS, JavaScript, DOM and SVG.
Handle events.
In general, using WebView, you can control web content from Java.
41
JavaFX
Media Engine
The JavaFX media engine is based on an open-source engine known as a Streamer.
This media engine supports the playback of video and audio content.
The JavaFX media engine provides support for audio for the following file formats:
MP3
Audio AIFF
WAV
Video FLV
The package javafx.scene.media contains the classes and interfaces to provide media
functionality in JavaFX. It is provided in the form of three components, which are
42
4. JavaFX Application JavaFX
In this chapter, we will discuss the structure of a JavaFX application in detail and also learn
to create a JavaFX application with an example.
Stage
A stage (a window) contains all the objects of a JavaFX application. It is represented by
Stage class of the package javafx.stage. The primary stage is created by the platform
itself. The created stage object is passed as an argument to the start() method of the
Application class (explained in the next section).
43
JavaFX
A stage has two parameters determining its position namely Width and Height. It is
divided as Content Area and Decorations (Title Bar and Borders).
Decorated
Undecorated
Transparent
Unified
Utility
You have to call the show() method to display the contents of a stage.
Scene
A scene represents the physical contents of a JavaFX application. It contains all the
contents of a scene graph. The class Scene of the package javafx.scene represents the
scene object. At an instance, the scene object is added to only one stage.
You can create a scene by instantiating the Scene Class. You can opt for the size of the
scene by passing its dimensions (height and width) along with the root node to its
constructor.
Geometrical (Graphical) objects (2D and 3D) such as Circle, Rectangle, Polygon,
etc.
Containers (Layout Panes) such as Border Pane, Grid Pane, Flow Pane, etc.
The Node Class of the package javafx.scene represents a node in JavaFX, this class is
the super class of all the nodes.
Root Node: The first Scene Graph is known as the Root node.
Branch Node/Parent Node: The node with child nodes are known as
branch/parent nodes. The abstract class named Parent of the package
javafx.scene is the base class of all the parent nodes, and those parent nodes will
be of the following types
44
JavaFX
rendered in order. Any transformation, effect state applied on the group will
be applied to all the child nodes.
o Region: It is the base class of all the JavaFX Node based UI Controls, such
as Chart, Pane and Control.
o WebView: This node manages the web engine and displays its contents.
Leaf Node: The node without child nodes is known as the leaf node. For example,
Rectangle, Ellipse, Box, ImageView, MediaView are examples of leaf nodes.
It is mandatory to pass the root node to the scene graph. If the Group is passed as root,
all the nodes will be clipped to the scene and any alteration in the size of the scene will
not affect the layout of the scene.
Application Class
The Application class of the package javafx.application is the entry point of the
application in JavaFX. To create a JavaFX application, you need to inherit this class and
implement its abstract method start(). In this method, you need to write the entire code
for the JavaFX graphics.
In the main method, you have to launch the application using the launch() method. This
method internally calls the start() method of the Application class as shown in the
following program.
@Override
public void start(Stage primaryStage) throws Exception {
/*
Code for JavaFX application.
(Stage, scene, scene graph)
*/
}
public static void main(String args[]){
launch(args);
}
}
45
JavaFX
Within the start() method, in order to create a typical JavaFX application, you need to
follow the steps given below
Prepare a Scene with the required dimensions and add the scene graph (root node
of the scene graph) to it.
Prepare a stage and add the scene to the stage and display the contents of the
stage.
Group: A Group node is represented by the class named Group which belongs to the
package javafx.scene, you can create a Group node by instantiating this class as shown
below.
The getChildren() method of the Group class gives you an object of the
ObservableList class which holds the nodes. We can retrieve this object and add nodes
to it as shown below.
We can also add Node objects to the group, just by passing them to the Group class and
to its constructor at the time of instantiation, as shown below.
Region: It is the Base class of all the JavaFX Node-based UI Controls, such as
Chart: This class is the base class of all the charts and it belongs to the package
javafx.scene.chart.
This class has two sub classes, which are PieChart and XYChart. These two in
turn have subclasses such as AreaChart, BarChart, BubbleChart, etc. used to
draw different types of XY-Plane Charts in JavaFX.
46
JavaFX
Pane: A Pane is the base class of all the layout panes such as AnchorPane,
BorderPane, DialogPane, etc. This class belong to a package that is called as
javafx.scene.layout.
You can use these classes to insert predefined layouts in your application.
Control: It is the base class of the User Interface controls such as Accordion,
ButtonBar, ChoiceBox, ComboBoxBase, HTMLEditor, etc. This class belongs
to the package javafx.scene.control.
You can use these classes to insert various UI elements in your application.
In a Group, you can instantiate any of the above-mentioned classes and use them as root
nodes, as shown in the following program.
WebView: This node manages the web engine and displays its contents.
47
JavaFX
While instantiating, it is mandatory to pass the root object to the constructor of the scene
class.
You can also pass two parameters of double type representing the height and width of the
scene as shown below.
Using this object, you can perform various operations on the stage. Primarily you can
perform the following
Set the title for the stage using the method setTitle().
Attach the scene object to the stage using the setScene() method.
Display the contents of the scene using the show() method as shown below.
start(): The entry point method where the JavaFX graphics code is to be written.
stop(): An empty method which can be overridden, here you can write the logic
to stop the application.
48
JavaFX
init(): An empty method which can be overridden, but you cannot create stage or
scene in this method.
Since the launch() method is static, you need to call it from a static context (main
generally). Whenever a JavaFX application is launched, the following actions will be carried
out (in the same order).
You can terminate a JavaFX application explicitly using the methods Platform.exit() or
System.exit(int).
@Override
public void start(Stage primaryStage) throws Exception {
49
JavaFX
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
shown below.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
50
JavaFX
Example
The following program generates an empty JavaFX window. Save this code in a file with
the name JavafxSample.java
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
}
public static void main(String args[]){
launch(args);
}
}
51
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac JavafxSample.java
java JavafxSample
52
JavaFX
@Override
public void start(Stage primaryStage) throws Exception {
}
}
line.setStartX(100.0);
line.setStartY(150.0);
line.setEndX(500.0);
line.setEndY(150.0);
Pass the Line (node) object, created in the previous step, as a parameter to the constructor
of the Group class, in order to add it to the group as follows
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
53
JavaFX
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
Example
The following program shows how to generate a straight line using JavaFX. Save this code
in a file with the name JavafxSample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.Line;
import javafx.stage.Stage;
@Override
public void start(Stage stage) {
//Creating a Group
Group root = new Group(line);
//Creating a Scene
Scene scene = new Scene(root, 600, 300);
55
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac DrawingLine.java
java DrawingLine
On executing, the above program generates a JavaFX window displaying a straight line as
shown below.
@Override
56
JavaFX
To the constructor of this class pass the text to be embedded in String format as follows.
line.setStartX(100.0);
line.setStartY(150.0);
line.setEndX(500.0);
line.setEndY(150.0);
57
JavaFX
In the start() method, create a group object by instantiating the class named Group,
which belongs to the package javafx.scene.
Pass the Text (node) object, created in the previous step, as a parameter to the
constructor of the Group class, in order to add it to the group as follows
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
shown below.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
Example
Following is the program to display text using JavaFX. Save this code in a file with name
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;
59
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac DisplayingText.java
java DisplayingText
60
JavaFX
On executing, the above program generates a JavaFX window displaying text as shown
below.
61
5. JavaFX 2D Shapes JavaFX
In the previous chapter, we have seen the basic application of JavaFX, where we learnt
how to create an empty window and how to draw a line on an XY plane of JavaFX. In
addition to the line, we can also draw several other 2D shapes.
2D Shape
In general, a 2D shape is a geometrical figure that can be drawn on the XY plane, these
include Line, Rectangle, Circle, etc.
Predefined shapes such as Line, Rectangle, Circle, Ellipse, Polygon, Polyline, Cubic
Curve, Quad Curve, Arc.
Path elements such as MoveTO Path Element, Line, Horizontal Line, Vertical Line,
Cubic Curve, Quadratic Curve, Arc.
In addition to these, you can also draw a 2D shape by parsing SVG path.
Each of the above mentioned 2D shape is represented by a class and all these classes
belongs to the package javafx.scene.shape. The class named Shape is the base class
of all the 2-Dimensional shapes in JavaFX.
Creating a 2D Shape
To create a chart, you need to
For example, if you want to create a line you need to instantiate the class named Line as
follows
62
JavaFX
For example, to draw a line you need to pass its x and y coordinates of the start point and
end point of the line. You can specify these values using their respective setter methods
as follows
The following table gives you the list of various shapes (classes) provided by JavaFX.
63
JavaFX
Circle: A circle is a line forming a closed loop, every point on which is a fixed
distance from a centre point.
Ellipse: An ellipse is defined by two points, each called a focus. If any point
on the ellipse is taken, the sum of the distances to the focus points is constant.
The size of the ellipse is determined by the sum of these two distances.
64
JavaFX
radiusY: The height of the full ellipse of which the current arc is a
part of.
65
JavaFX
SVG shape: In JavaFX, we can construct images by parsing SVG paths. Such
shapes are represented by the class named SVGPath. This class belongs to
the package javafx.scene.shape.
11
This class has a property named content of String datatype. This represents
the SVG Path encoded string, from which the image should be drawn.
2D Shapes Line
In general, a line is a geometrical structure which joins two points on an XY plane.
In JavaFX, a line is represented by a class named Line. This class belongs to the
package javafx.scene.shape.
setStartX(value);
setStartY(value);
setEndX(value);
setEndY(value);
66
JavaFX
@Override
public void start(Stage primaryStage) throws Exception {
line.setStartX(100.0);
line.setStartY(150.0);
line.setEndX(500.0);
line.setEndY(150.0);
Pass the Line (node) object, created in the previous step, as a parameter to the constructor
of the Group class, in order to add it to the group as follows
67
JavaFX
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
Example
Following is the program which generates a straight line using JavaFX. Save this code in
a file with the name DrawingLine.java.
68
JavaFX
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.Line;
import javafx.stage.Stage;
@Override
public void start(Stage stage) {
//Creating a Group
Group root = new Group(line);
//Creating a Scene
Scene scene = new Scene(root, 600, 300);
69
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac DrawingLine.java
java DrawingLine
On executing, the above program generates a JavaFX window displaying a straight line as
shown below.
2D Shapes Rectangle
In general, a rectangle is a four-sided polygon that has two pairs of parallel and
concurrent sides with all interior angles as right angles.
70
JavaFX
To draw a rectangle, you need to pass values to these properties, either by passing them
to the constructor of this class, in the same order, at the time of instantiation, as shown
below:
Or, by using their respective setter methods as shown in the following code block
setX(value);
setY(value);
setWidth(value);
setHeight(value);
You need to follow the steps given below to draw a rectangle in JavaFX.
71
JavaFX
@Override
public void start(Stage primaryStage) throws Exception {
line.setStartX(100.0);
line.setStartY(150.0);
line.setEndX(500.0);
line.setEndY(150.0);
Pass the Rectangle (node) object, created in the previous step, as a parameter to the
constructor of the Group class, in order to add it to the group as follows
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
72
JavaFX
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
Example
Following is the program which generates a rectangle JavaFX. Save this code in a file with
the name RectangleExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.Rectangle;
73
JavaFX
//Drawing a Rectangle
Rectangle rectangle = new Rectangle();
launch(args);
74
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac RectngleExample.java
java RectangleExample
Rounded Rectangle
In JavaFX, you can draw a rectangle either with sharp edges or with arched edges as
shown in the following diagram.
75
JavaFX
The one with arched edges is known as a rounded rectangle and it has two additional
properties namely
arcHeight: The vertical diameter of the arc, at the corners of a rounded rectangle.
arcWidth: The horizontal diameter of the arc at the corners of a rounded rectangle.
By default, JavaFX creates a rectangle with sharp edges unless you set the height and
width of the arc to +ve values (0<) using their respective setter methods setArcHeight()
and setArcWidth().
76
JavaFX
Example
Following is a program which generates a rounded rectangle using JavaFX. Save this code
in a file with the name RoundedRectangle.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.Rectangle;
77
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac RoundedRectangle.java
java RoundedRectangle
2D Shapes Circle
A circle is the locus of all points at a fixed distance (radius of circle) from a fixed point (the
centre of circle). In other words, a circle is a line forming a closed loop, every point on
which is a fixed distance from a centre point.
78
JavaFX
Centre: It is a point inside the circle. All points on the circle are equidistant (same
distance) from the centre point.
Radius: The radius is the distance from the centre to any point on the circle. It is
half the diameter.
In JavaFX, a circle is represented by a class named Circle. This class belongs to the
package javafx.scene.shape.
79
JavaFX
setCenterX(value);
setCenterY(value);
setRadius(value);
@Override
public void start(Stage primaryStage) throws Exception {
circle.setCenterX(300.0f);
circle.setCenterY(135.0f);
circle.setRadius(100.0f);
80
JavaFX
Pass the circle (node) object, created in the previous step, as a parameter to the
constructor of the Group class, in order to add it to the group as follows:
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
81
JavaFX
Example
Following is a program which generates a circle using JavaFX. Save this code in a file with
the name CircleExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
//Drawing a Circle
Circle circle = new Circle();
82
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac CircleExample.java
java CircleExample
On executing, the above program generates a javaFx window displaying a circle as shown
below.
2D Shapes Ellipse
An Ellipse is defined by two points, each called a focus. If any point on the Ellipse is taken,
the sum of the distances to the focus points is constant. The size of the Ellipse is
determined by the sum of these two distances. The sum of these distances is equal to the
length of the major axis (the longest diameter of the ellipse). A circle is, in fact, a special
case of an Ellipse.
Centre: A point inside the Ellipse which is the midpoint of the line segment linking
the two foci. The intersection of the major and minor axes.
83
JavaFX
In JavaFX, an Ellipse is represented by a class named Ellipse. This class belongs to the
package javafx.scene.shape.
setCenterX(value);
setCenterY(value);
84
JavaFX
setRadiusX(value);
setRadiusY(value);
This can be done by using their respective setter methods as shown in the following code
block.
ellipse.setCenterX(300.0f);
ellipse.setCenterY(150.0f);
ellipse.setRadiusX(150.0f);
ellipse.setRadiusY(75.0f);
Pass the Ellipse (node) object created in the previous step as a parameter to the
constructor of the Group class. This should be done in order to add it to the group as
shown in the following code block
85
JavaFX
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
86
JavaFX
Example
Following is a program which generates an Ellipse using JavaFX. Save this code in a file
with the name EllipseExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.Ellipse;
@Override
public void start(Stage stage) {
//Drawing an ellipse
Ellipse ellipse = new Ellipse();
87
JavaFX
Compile and execute the saved Java file from the command prompt using the following
commands.
javac EllipseExample.java
java EllipseExample
2D Shapes Polygon
A closed shape formed by a number of coplanar line segments connected end to end.
A polygon is described by two parameters, namely, the length of its sides and the
measures of its interior angles.
88
JavaFX
In JavaFX, a polygon is represented by a class named Polygon. This class belongs to the
package javafx.scene.shape.
By instantiating this class, you can create a polygon node in JavaFX. You need to pass the
x, y coordinates of the points by which the polygon should be defined in the form of a
double array.
You can pass the double array as a parameter of the constructor of this class as shown
below
Pass the polygon node (hexagon) object, created in the previous step, as a parameter to
the constructor of the Group class, in order to add it to the group as follows
90
JavaFX
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
91
JavaFX
Example
Following is a program which generates a Polygon (hexagon) using JavaFX. Save this code
in a file with the name PolygonExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.Polygon;
import javafx.stage.Stage;
//Creating a Polygon
Polygon polygon = new Polygon();
92
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac PolygonExample.java
java PolygonExample
93
JavaFX
2D Shapes Polyline
A Polyline is same as a polygon except that a polyline is not closed in the end. Or,
continuous line composed of one or more line segments.
In short, we can say a polygon is an open figure formed by coplanar line segments.
In JavaFX, a Polyline is represented by a class named Polygon. This class belongs to the
package javafx.scene.shape.
By instantiating this class, you can create polyline node in JavaFX. You need to pass the
x, y coordinates of the points by which the polyline should be defined in the form of a
double array.
You can pass the double array as a parameter of the constructor of this class as shown
below
94
JavaFX
}
}
Pass the Polyline (node) object, created in the previous step, as a parameter to the
constructor of the Group class, in order to add it to the group as follows
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
95
JavaFX
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
Example
Following is a program which generates a polyline using JavaFX. Save this code in a file
with the name PolylineExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.Polyline;
96
JavaFX
@Override
public void start(Stage stage) {
//Creating a polyline
Polyline polyline = new Polyline();
97
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac PolylineExample.java
java PolylineExample
2D Shapes QuadCurve
Mathematically a quadratic curve is one that is described by a quadratic function like
y = ax2 + bx + c.
In computer graphics Bezier curves are used. These are parametric curves which appear
reasonably smooth at all scales. These Bezier curves are drawn based on points on an XY
plane.
98
JavaFX
A quadratic curve is a Bezier parametric curve in the XY plane which is a curve of degree
2. It is drawn using three points: start point, end point and control point as shown in
the following diagram.
To draw a QuadCurve, you need to pass values to these properties. This can be done either
by passing them to the constructor of this class, in the same order, at the time of
instantiation, as follows
99
JavaFX
setStartX(value);
setStartY(value);
setControlX(value);
setControlY(value);
setEndX(value);
setEndY(value);
To Draw a Bezier Quadrilateral Curve in JavaFX, follow the steps given below.
100
JavaFX
quadCurve.setControlX(250.0f);
quadCurve.setControlY(0.0f);
Pass the QuadCurve (node) object created in the previous step as a parameter to the
constructor of the Group class, in order to add it to the group as follows
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
101
JavaFX
Example
Following is a program which generates a quadrilateral curve using JavaFX. Save this code
in a file with the name QuadCurveExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.QuadCurve;
@Override
public void start(Stage stage) {
//Creating a QuadCurve
QuadCurve quadCurve = new QuadCurve();
102
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac QuadCurveExample.java
java QuadCurveExample
103
JavaFX
2D Shapes CubicCurve
A CubicCurve is described by a third-degree polynomial function of two variables, and can
be written in the following form
These Bezier curves are generally used in computer graphics. They are parametric curves
which appear reasonably smooth at all scales. These curves are drawn based on points on
the XY plane.
104
JavaFX
105
JavaFX
To draw a cubic curve, you need to pass values to these properties, either by passing them
to the constructor of this class, in the same order, at the time of instantiation, as shown
below
setStartX(value);
setStartY(value);
setControlX1(value);
setControlY1(value);
setControlX2(value);
setControlY2(value);
setEndX(value);
setEndY(value);
To draw a Bezier cubic curve in JavaFX, follow the steps given below.
@Override
public void start(Stage primaryStage) throws Exception {
106
JavaFX
Pass the CubicCurve (node) object created in the previous step as a parameter to the
constructor of the Group class in order to add it to the group as follows
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
107
JavaFX
primaryStage.setScene(scene);
primaryStage.show();
Example
Following is a program which generates a Bezier CubicCurve using JavaFX. Save this code
in a file with the name CubicCurveExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.CubicCurve;
@Override
public void start(Stage stage) {
cubicCurve.setStartY(150.0f);
cubicCurve.setControlX1(400.0f);
cubicCurve.setControlY1(40.0f);
cubicCurve.setControlX2(175.0f);
cubicCurve.setControlY2(250.0f);
cubicCurve.setEndX(500.0f);
cubicCurve.setEndY(150.0f);
Compile and execute the saved java file from the command prompt using the following
commands.
javac CubicCurveExample.java
java CubicCurveExample
On executing, the above program generates a JavaFX window displaying a Bezier cubic
curve as shown below.
109
JavaFX
2D Shapes Arc
An arc is part of a curve. It is described by the following properties
110
JavaFX
In JavaFX, an arc is represented by a class named Arc. This class belongs to the package
javafx.scene.shape.
To draw an arc, you need to pass values to these properties, either by passing them to
the constructor of this class, in the same order, at the time of instantiation, as shown
below
111
JavaFX
setCenterX(value);
setCenterY(value);
setRadiusX(value);
setRadiusY(value);
Types of Arc:
In JavaFX, you can draw three kinds of arcs namely
You can set the type of the arc using the method setType() by passing any of the following
properties: ArcType.OPEN, ArcType.CHORD, ArcType.ROUND.
@Override
public void start(Stage primaryStage) throws Exception {
112
JavaFX
You can also set the type of the arc (round, chord open) by using the setType() method.
Pass the Arc (node) object created in the previous step as a parameter to the constructor
of the Group class. This should be done in order to add it to the group as shown below
113
JavaFX
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
Example
Following is a program which generates an arc. Save this code in a file with the name
ArcExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
114
JavaFX
import javafx.stage.Stage;
import javafx.scene.shape.Arc;
import javafx.scene.shape.ArcType;
//Drawing an arc
Arc arc = new Arc();
115
JavaFX
stage.show();
Compile and execute the saved Java file from the command prompt using the following
commands.
javac ArcExample.java
java ArcExample
On executing, the above program generates a JavaFX window displaying an arc as shown
in the following screenshot.
2D Shapes SVGPath
SVG (Scalable Vector Graphics) is an XML based language to define vector based
graphics.
116
JavaFX
In JavaFX we can construct images by parsing SVG paths. Such shapes are represented
by the class named SVGPath. This class belongs to the package javafx.scene.shape.
By instantiating this class, you can create a node which is created by parsing an SVG path
in JavaFX.
This class has a property named content of String datatype. This represents the SVG Path
encoded string, from which the image should be drawn.
To draw a shape by parsing an SVG path, you need to pass values to this property, using
the method named setContent() of this class as follows
setContent(value);
To Draw a shape by parsing an SVGPath in JavaFX, follow the steps given below.
@Override
public void start(Stage primaryStage) throws Exception {
String path = "M 100 100 L 300 100 L 200 300 z";
117
JavaFX
Pass the SVGPath (node) object created in the previous step as a parameter to the
constructor of the Group class. This should be done in order to add it to the group as
follows -
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
Launch the JavaFX application by calling the static method launch() of the Application
class from the main x method as follows.
Example
Following is a program which generates a shape by parsing SVG path using JavaFX. Save
this code in a file with the name SVGExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.SVGPath;
import javafx.stage.Stage;
@Override
public void start(Stage stage) {
String path = "M 100 100 L 300 100 L 200 300 z";
119
JavaFX
stage.setTitle("Drawing a Sphere");
launch(args);
Compile and execute the saved java file from the command prompt using the following
commands.
javac SVGExample.java
java SVGExample
On executing, the above program generates a JavaFX window displaying a triangle, which
is drawn by parsing the SVG path as shown below.
120
JavaFX
But, just these predefined shapes are not sufficient to build complexer shapes other than
the primitives provided by the javafx.shape package.
For example, if you want to draw a graphical element as shown in the following diagram,
you cannot rely on those simple shapes.
121
JavaFX
It is attached to an observable list which holds various Path Elements such as moveTo,
LineTo, HlineTo, VlineTo, ArcTo, QuadCurveTo, CubicCurveTo.
On instantiating, this class constructs a path based on the given path elements.
You can pass the path elements to this class while instantiating it as follows
Or, you can get the observable list and add all the path elements using addAll() method
as follows
122
JavaFX
You can also add elements individually using the add() method as
X: The x coordinate of the point to which a line is to be drawn from the current
position.
Y: The y coordinate of the point to which a line is to be drawn from the current
position.
You can create a move to path element by instantiating the MoveTo class and passing the
x, y coordinates of the new point as follows
If you dont pass any values to the constructor, then the new point will be set to (0,0).
You can also set values to the x, y coordinate, using their respective setter methods as
follows
setX(value);
setY(value);
123
JavaFX
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;
124
JavaFX
//Creating a Path
Path path = new Path();
125
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac ComplexShape.java
java ComplexShape
On executing, the above program generates a JavaFX window displaying an arc, which is
drawn from the current position to the specified point as shown below.
126
JavaFX
Following are the various path elements (classes) provided by JavaFX. These classes exist
in the package javafx.shape. All these classes inherit the class PathElement.
LineTo: The path element line is used to draw a straight line to a point in the
specified coordinates from the current position.
VLineTo: The path element vertical line is used to draw a vertical line to a
point in the specified coordinates from the current position.
127
JavaFX
CubicCurveTo: The path element cubic curve is used to draw a cubic curve
to a point in the specified coordinates from the current position.
128
JavaFX
ArcTo: The path element Arc is used to draw an arc to a point in the specified
coordinates from the current position.
radiusX: The width of the full ellipse of which the current arc is a part
of.
radiusY: The height of the full ellipse of which the current arc is a
part of.
PathElement Line
The path element line is used to draw a straight line to a point in the specified coordinates
from the current position.
X: The x coordinate of the point to which a line is to be drawn from the current
position.
Y: The y coordinate of the point to which a line is to be drawn from the current
position.
To draw a line, you need to pass values to these properties. This can be either done by
passing them to the constructor of this class, in the same order, at the time of
instantiation, as shown below
setX(value);
setY(value);
129
JavaFX
To draw a line to a specified point from the current position in JavaFX, follow the steps
given below.
@Override
public void start(Stage primaryStage) throws Exception {
}
}
130
JavaFX
Pass the Line (node) object created in the previous step as a parameter to the constructor
of the Group class. This should be done in order to add it to the group as shown below
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
131
JavaFX
primaryStage.setScene(scene);
primaryStage.show();
Example
The following program shows how to draw a straight line from the current point to a
specified position using the class Path of JavaFX. Save this code in a file with the name
LineToExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.stage.Stage;
@Override
public void start(Stage stage) {
132
JavaFX
133
JavaFX
launch(args);
}
}
Compile and execute the saved java file from the command prompt using the following
commands.
javac LineToExample.java
java LineToExample
On executing, the above program generates a JavaFX window displaying a straight line,
which is drawn from the current position to the specified point, as shown below.
134
JavaFX
X: The x coordinate of the point to which a horizontal line is to be drawn from the
current position.
To draw a path element horizontal line, you need to pass a value to this property. This can
be either done by passing it to the constructor of this class, at the time of instantiation,
as follows
setX(value);
Follow the steps given below to draw a horizontal line to a specified point from the current
position in JavaFX.
@Override
public void start(Stage primaryStage) throws Exception {
moveTo.setX(100.0f);
moveTo.setY(150.0f);
Pass the Line (node) object created in the previous step as a parameter to the constructor
of the Group class. This should be done in order to add it to the group as shown below
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows
136
JavaFX
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
Example
Following is a program which draws a horizontal line from the current point to a specified
position using the class Path of JavaFX. Save this code in a file with the name
HLineToExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.HLineTo;
import javafx.scene.shape.MoveTo;
137
JavaFX
import javafx.scene.shape.Path;
public class HLineToExample extends Application {
@Override
public void start(Stage stage) {
138
JavaFX
stage.show();
Compile and execute the saved java file from the command prompt using the following
commands.
javac HLineToExample.java
java HLineToExample
On executing, the above program generates a JavaFX window displaying a horizontal line,
which is drawn from the current position to the specified point, as shown below.
139
JavaFX
Y: The y coordinate of the point to which a vertical is to be drawn from the current
position.
To draw the path element vertical line, you need to pass a value to this property. This can
be done either by passing it to the constructor of this class at the time of instantiation as
follows
setY(value);
To draw a vertical line to a specified point from the current position in JavaFX, follow the
steps given below.
@Override
public void start(Stage primaryStage) throws Exception {
140
JavaFX
Create the MoveTo path element and set XY coordinates to the starting point of the line
to the coordinates (100, 150). This can be done by using the methods setX() and setY()
of the class MoveTo as shown below.
Pass the Line (node) object created in the previous step as a parameter to the constructor
of the Group class. This can be done in order to add it to the group as shown below
141
JavaFX
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as a Sample Application as
shown below.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
Example
Following is a program which draws a horizontal line from the current point to a specified
position using the class Path of JavaFX. Save this code in a file with the name
HLineToExample.java.
142
JavaFX
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.HLineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
moveTo.setX(100.0);
moveTo.setY(150.0);
143
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac HLineToExample.java
java HLineToExample
144
JavaFX
On executing, the above program generates a JavaFX Window displaying a horizontal line,
which is drawn from the current position to the specified point, as shown below.
setX: The x coordinate of the point to which a curve is to be drawn from the current
position.
setX: The y coordinate of the point to which a curve is to be drawn from the current
position.
To draw a quadratic curve, you need to pass values to these properties. This can be done
either by passing them to the constructor of this class, in the same order, at the time of
instantiation, as follows
145
JavaFX
setX(value);
setY(value);
setControlX(value);
setControlY(value);
To draw a quadratic curve to a specified point from the current position in JavaFX, follow
the steps given below.
}
}
146
JavaFX
Pass the Line (node) object created in the previous step as a parameter to the constructor
of the Group class. This can be done in order to add it to the group as shown below
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
147
JavaFX
Using the primaryStage object, set the title of the scene as Sample Application as
follows:
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
Example
Following is a program which draws a quadratic curve from the current point to a specified
position using the class named Path of JavaFX. Save this code in a file with the name
QuadCurveToExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
148
JavaFX
import javafx.scene.shape.QuadCurveTo;
quadCurveTo.setControlY(0.0f);
149
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac QuadCurveToExample.java
java QuadCurveToExample
On executing, the above program generates a JavaFX window displaying a quadratic curve.
This is drawn from the current position to the specified point as shown below.
150
JavaFX
setX: The x coordinate of the point to which a curve is to be drawn from the current
position.
setX: The y coordinate of the point to which a curve is to be drawn from the current
position.
To draw a cubic curve, you need to pass values to these properties. This can be done by
passing them to the constructor of this class. These should be in the same order as they
were at the time of instantiation as shown below
setX(value);
setY(value);
setControlX1(value);
setControlY1(value);
setControlX2(value);
setControlY2(value);
To draw a cubic curve to a specified point from the current position in JavaFX, follow the
steps given below.
151
JavaFX
152
JavaFX
cubicCurveTo.setX(500.0f);
cubicCurveTo.setY(150.0f)
Pass the Line (node) object created in the previous step as a parameter to the constructor
of the Group class. This can be done in order to add it to the group as shown below
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
153
JavaFX
primaryStage.show();
Example
Following is the program which draws a cubic curve from the current point to a specified
position using the class named Path of JavaFX. Save this code in a file with the name
CubicCurveToExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.CubicCurveTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
@Override
public void start(Stage stage) {
154
JavaFX
155
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac cubicCurveToExample.java
java cubicCurveToExample
On executing, the above program generates a javaFx window displaying a quadratic curve,
which is drawn from the current position to the specified point, as shown below.
PathElement Arc
The Path Element Arc is used to draw an arc to a point in the specified coordinates from
the current position.
156
JavaFX
To draw the Path element arc, you need to pass values to these properties This can be
done by passing them to the constructor of this class, in the same order, at the time of
instantiation as follows
setX(value);
setY(value);
setRadiusX(value);
setRadiusY(value);
To draw an arc to a specified point from the current position in JavaFX, follow the steps
given below.
@Override
public void start(Stage primaryStage) throws Exception {
}
}
157
JavaFX
arcTo.setRadiusX(50.0);
arcTo.setRadiusY(50.0);
Pass the Line (node) object, created in the previous step as a parameter to the constructor
of the Group class. This should be done in order to add it to the group as follows
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
158
JavaFX
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
Example
Following is a program that draws an arc from the current point to a specified position
using the class Path of JavaFX. Save this code in a file with the name ArcToExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.ArcTo;
159
JavaFX
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
arcTo.setRadiusX(50.0);
arcTo.setRadiusY(50.0);
160
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac ArcToExample.java
java ArcToExample
On executing, the above program generates a JavaFX window displaying an arc, which is
drawn from the current position to the specified point, as shown below.
161
JavaFX
Properties of 2D Objects
For all the 2-Dimensional objects, you can set various properties like fill, stroke,
StrokeType, etc. The following section discusses various properties of 2D objects.
Stroke Type
This property is of the type StrokeType. It represents the position of the boundary line
applied to the shape. You can set the type of the stroke using the method
setStrokeType() as follows
Path.setStrokeType(StrokeType.CENTERED);
Inside: The boundary line will be drawn inside the edge (outline) of the shape
(StrokeType.INSIDE).
Outside: The boundary line will be drawn outside the edge (outline) of the shape
(StrokeType.OUTSIDE).
Centered: The boundary line will be drawn in such a way that the edge (outline)
of the shape passes exactly thorough the center of the line
(StrokeType.CENTERED).
By default, the stroke type of a shape is centered. Following is the diagram of a triangle
with different Stroke Types:
Stroke Width
This property is of the type double and it represents the width of the boundary line of the
shape. You can set the stroke width using the method setStrokeWidth() as follows
Path.setStrokeWidth(3.0)
162
JavaFX
By default, the value of the stroke with of a shape is 1.0. Following is a diagram of a
triangle with different values of stroke width.
Stroke Fill
This property is of the type Paint and it represents the color that is to be filled inside the
shape. You can set the fill color of a shape using the method setFill() as follows
path.setFill(COLOR.BLUE);
By default, the value of the stroke color is BLACK. Following is a diagram of a triangle
with different colors.
Stroke
This property is of the type Paint and it represents the color of the boundary line of the
shape. You can set a value to this property using the method setStroke() as shown below
path.setStroke(Color.RED);
163
JavaFX
By default, the color of the stroke is black. Following is a diagram of a triangle with different
stroke colors.
path.setStrokeLineJoin(StrokeLineJoin.BEVEL);
Bevel: The bevel join is applied to the joining of the edges of the shape
(StrokeLineJoin.BEVEL).
Miter: The miter join is applied to the joining of the edges of the shape
(StrokeLineJoin.MITER).
Round: The round join is applied to the joining of the edges of the shape
(StrokeLineJoin.ROUND).
By default, the Stroke Line Joining a shape is miter. Following is a diagram of a triangle
with different line join types:
164
JavaFX
You can set value to this property using the method setStroke() as follows
path.setStrokeMiterLimit(4);
By default, the stroke miter limit value id 10 of the stroke is black. Following is a diagram
of a triangle with different stroke limits.
line.setStrokeLineCap(StrokeLineCap.SQUARE);
Butt: The butt line cap is applied at the end of the lines (StrokeLineCap.BUTT).
Square: The square line cap is applied at the end of the lines
(StrokeLineCap.SQUARE).
Round: The round line cap is applied at the end of the lines
(StrokeLineCap.ROUND).
By default, the Stroke Line cap a shape is square. Following is the diagram of a triangle
with different line cap types.
165
JavaFX
Smooth
This property is of the type Boolean. If this value is true, then the edges of the shape will
be smooth.
You can set value to this property using the method setSmooth() as follows
path.setSmooth(false);
By default, the smooth value is true. Following is a diagram of a triangle with both smooth
values.
166
JavaFX
Operations on 2D Objects
If we add more than one shape to a group, the first shape is overlapped by the second
one as shown below.
Union Operation
This operation takes two or more shapes as inputs and returns the area occupied by them
combinedly as shown below.
167
JavaFX
You can perform union operation on the shapes using the method called union(). Since
this is a static method, you should call it using the class name (Shape or its subclasses)
as shown below.
Example
Following is an example of the union operation. In here, we are drawing two circles and
performing a union operation on them. Save this code in a file with the name
unionExample.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.shape.Shape;
@Override
public void start(Stage stage) {
//Drawing Circle1
Circle circle1 = new Circle();
//Setting the position of the circle
circle1.setCenterX(250.0f);
circle1.setCenterY(135.0f);
//Setting the radius of the circle
circle1.setRadius(100.0f);
//Setting the color of the circle
circle1.setFill(Color.DARKSLATEBLUE);
//Drawing Circle2
Circle circle2 = new Circle();
//Setting the position of the circle
circle2.setCenterX(350.0f);
circle2.setCenterY(135.0f);
168
JavaFX
circle2.setFill(Color.BLUE);
stage.setScene(scene);
169
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac UnionExample.java
java UnionExample
On executing, the above program generates a JavaFX window displaying the following
output
170
JavaFX
Intersection Operation
This operation takes two or more shapes as inputs and returns the intersection area
between them as shown below.
You can perform an intersection operation on the shapes using the method named
intersect(). Since this is a static method, you should call it using the class name (Shape
or its subclasses) as shown below.
Following is an example of the intersection operation. In here, we are drawing two circles
and performing an intersection operation on them.
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.shape.Shape;
//Drawing Circle1
Circle circle1 = new Circle();
171
JavaFX
//Drawing Circle2
Circle circle2 = new Circle();
//Setting the position of the circle
circle2.setCenterX(350.0f);
circle2.setCenterY(135.0f);
//Setting the radius of the circle
circle2.setRadius(100.0f);
//Setting the color of the circle
circle2.setFill(Color.BLUE);
172
JavaFX
launch(args);
Compile and execute the saved java file from the command prompt using the following
commands.
javac IntersectionExample.java
java IntersectionExample
On executing, the above program generates a JavaFX window displaying the following
output
173
JavaFX
Subtraction Operation
This operation takes two or more shapes as an input. Then, it returns the area of the first
shape excluding the area overlapped by the second one as shown below.
You can perform the Substraction Operation on the shapes using the method named
substract(). Since this is a static method, you should call it using the class name (Shape
or its subclasses) as shown below.
Following is an example of the Subtraction Operation. In here, we are drawing two circles
and performing a subtraction operation on them.
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.shape.Shape;
174
JavaFX
//Drawing Circle1
//Drawing Circle2
Circle circle2 = new Circle();
//Setting the position of the circle
circle2.setCenterX(350.0f);
circle2.setCenterY(135.0f);
//Setting the radius of the circle
circle2.setRadius(100.0f);
//Setting the color of the circle
circle2.setFill(Color.BLUE);
175
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac SubtractionExample.java
java SubtractionExample
On executing, the above program generates a JavaFX window displaying the following
output
176
6. JavaFX Text JavaFX
Just like various shapes, you can also create a text node in JavaFX. The text node is
represented by the class named Text, which belongs to the package javafx.scene.text.
This class contains several properties to create text in JavaFX and modify its appearance.
This class also inherits the Shape class which belongs to the package
javafx.scene.shape.
Therefore, in addition to the properties of the text like font, alignment, line spacing, text,
etc. It also inherits the basic shape node properties such as strokeFill, stroke,
strokeWidth, strokeType, etc.
The class Text contains a property named text of string type, which represents the text
that is to be created.
After instantiating the Text class, you need to set value to this property using the
setText() method as shown below.
You can also set the position (origin) of the text by specifying the values to the properties
x and y using their respective setter methods namely setX() and setY() as shown in the
following code block
text.setX(50);
text.setY(50);
Example
The following program is an example demonstrating how to create a text node in JavaFX.
Save this code in a file with name TextExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
177
JavaFX
import javafx.stage.Stage;
import javafx.scene.text.Text;
@Override
public void start(Stage stage) {
178
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac TextExample.java
java TextExample
On executing, the above program generates a JavaFX window displaying the specified text
as follows
You can change the font size and color of the text using the setFont() method. This
method accepts an object of the Font class.
The class named Font of the package javafx.scene.text is used to define the font for the
text. This class contains a static method named font().
family: This is of a String type and represents the family of the font that we want
to apply to the text.
179
JavaFX
weight: This property represents the weight of the font. It accepts 9 values, which
are: FontWeight.BLACK, FontWeight.BOLD, FontWeight.EXTRA_BOLD,
FontWeight.EXTRA_LIGHT, LIGHT, MEDIUM, NORMAL, SEMI_BOLD, THIN.
posture: This property represents the font posture (regular or italic). It accepts
two values FontPosture.REGULAR and FontPosture.ITALIC.
size: This property is of type double and it represents the size of the font.
You can set font to the text by using the following method
Example
The following program is an example demonstrating how to set font of the text node in
JavaFX. In here, we are setting the font to Verdana, weight to bold, posture to regular and
size to 20.
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;
180
JavaFX
text.setX(50);
text.setY(130);
Compile and execute the saved java file from the command prompt using the following
commands.
javac TextFontExample.java
java TextFontExample
181
JavaFX
On executing, the above program generates a JavaFX window displaying the text with the
specified font as follows
You can set the color to the text using the setFill() method of the shape (inherited) class
as follows
text.setFill(Color.BEIGE);
Similarly, you can set the stroke color of the text using the method setStroke(). While
the width of the stroke can be set using the method setStrokeWidth() as follows
182
JavaFX
Example
The following program is an example that demonstrates how to set the color, strokeWidth
and strokeColor, of the text node. In this code, we are setting stroke color to blue, text
color to brown and the stroke width to 2.
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;
text.setX(50);
text.setY(130);
183
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac StrokeExample.java
java StrokeExample
184
JavaFX
On executing, the above program generates a JavaFX window displaying the text with the
specified stroke and color attributes as follows
You can strike through the text using the method setStrikethrough(). This accepts a
Boolean value, pass the value true to this method to strike through the text as shown in
the following code box
In the same way, you can underline a text by passing the value true to the method
setUnderLine() as follows
Example
The following program is an example demonstrating how to apply decorations such as
underline or strike through to a text. Save this code in a file with the name
DecorationsExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
185
JavaFX
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
@Override
public void start(Stage stage) {
Compile and execute the saved Java file from the command prompt using the following
commands.
javac DecorationsExample.java
java DecorationsExample
188
7. JavaFX Effects JavaFX
An effect is any action that enhances the appearance of the graphics. In JavaFX, an effect
is an algorithm that is applied on nodes to enhance their appearance visually. The effect
property of the Node class is used to specify the effect.
In JavaFX, you can set various effects to a node such as bloom, blur and glow. Each of
these effects are represented by a class and all these classes are available in a package
named javafx.scene.effect.
For example, if you want to apply glow effect to an image in your application. Firstly, you
need to create an image node by instantiating the Image class and set its view as shown
below.
//Creating an image
Image image = new
Image("http://www.tutorialspoint.com/green/images/logo.png");
189
JavaFX
imageView.setFitWidth(400);
//Setting the preserve ratio of the image view
imageView.setPreserveRatio(true);
For example: To apply the glow effect, you need to instantiate the Glow class as shown
in the following code box
For example: To draw a 3-Dimensional box, you need to pass its width, height and depth.
You can specify these values using their respective setter methods as shown below
imageView.setEffect(glow);
JavaFX Effects: The following table gives you the list of various effects (classes) provided
by JavaFX. These classes exist in the package called javafx.scene.effect.
ColorAdjust: You can adjust the color of an image by applying the color
adjust effect to it. This includes the adjustment of the hue, saturation,
brightness and contrast on each pixel.
1
The class named ColorAdjust of the package javafx.scene.effect
represents the color adjust effect.
190
JavaFX
Just like Color Input effect (It is used to pass the specified colored
3 rectangular region as input to other effect), Image Input effect is used to
pass the specified image as an input to another effect.
Bloom: On applying bloom effect, pixels in some portions of the node are
made to glow.
5
The class named Bloom of the package javafx.scene.effect represents
the bloom effect.
Glow: Just like bloom, the Glow effect makes the given input image to
glow, this effect makes the bright pixels of the input brighter.
6
The class named Glow of the package javafx.scene.effect represents
the glow effect.
191
JavaFX
GaussianBlur: Just like Box Blur Gaussian is an effect to blur the nodes
in JavaFX. The only difference in the Gaussian Blur effect is that a
Gaussian convolution kernel is used to produce a blurring effect.
8
The class named GaussianBlur of the package javafx.scene.effect
represents the Gaussian Blur effect.
Shadow: This effect creates a duplicate of the specified node with blurry
edges.
12
The class named Shadow of the package javafx.scene.effect
represents the sepia tone effect.
192
JavaFX
Distant light source: A source which is at a far distance from the node.
16
In here, the light is attenuated in one direction from the source.
Spot light source: The light from this source attenuates in all directions.
17 The intensity of the light depends on the distance of the object from the
source.
Point light source: The light from this source attenuates in all directions
18 from a single point. The intensity of the light depends on the distance of
the object from the source.
The class named ColorAdjust of the package javafx.scene.effect represents the color
adjust effect, this class contains five properties namely
input: This property is of the Effect type and it represents an input to the color
adjust effect.
193
JavaFX
hue: This property is of Double type and it represents the hue adjustment value
for this effect.
Example
The following program is an example of demonstrating the color adjust effect. In here, we
are embedding an image (Tutorialspoint Logo) in JavaFX scene using Image and
ImageView classes. This is being done at the position 100, 70 and with a fit height and
fit width of 200 and 400 respectively.
We are adjusting the color of this image using the color adjust effect. With contrast, hue,
brightness and saturation values as 0.4. -0.05, 0.9, 0.8.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.ColorAdjust;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;
@Override
public void start(Stage stage) {
//Creating an image
Image image = new
Image("http://www.tutorialspoint.com/green/images/logo.png");
194
JavaFX
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);
195
JavaFX
stage.show();
}
Compile and execute the saved java file from the command prompt using the following
commands.
javac ColorAdjustEffectExample.java
java ColorAdjustEffectExample
For example, while applying the blend effect, it requires an object of effect type as input.
There we can pass this as an input.
The class named ColorInput of the package javafx.scene.effect represents the color
input effect. This class contains four properties namely
height: This property is of double type; it represents the height of the region that
is to be filled with color.
width: This property is of double type; it represents the width of the region that is
to be filled with color.
paint: This property is of Paint type; it represents the color with which the input
region is to be filled.
Example
Following is an example demonstrating the color input effect. In here, we are creating a
color input of the dimensions 50, 400 (height, width) at the position 50, 140, and filling it
with the color CHOCOLATE.
We are creating rectangle and applying this effect to it. Save this code in a file with the
name ColorInputEffectExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.ColorInput;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
@Override
//creating a rectangle
Rectangle rectangle = new Rectangle();
197
JavaFX
198
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac ColorInputEffectExample.java
java ColorInputEffectExample
On applying this effect, the image specified will not be modified. This effect is applied to
any node.
The class named ImageInput of the package javafx.scene.effect represents the Image
Input effect, this class contains three properties, which are
199
JavaFX
Example
The following program is an example demonstrating the Image input effect. In here, we
are creating an image input at the position 150, 100, and taking the following image
(tutorialspoint logo) as a source for this effect.
We are creating a rectangle and applying this effect to it. Save this code in a file with the
name ImageInputEffectExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.ImageInput;
import javafx.scene.image.Image;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
@Override
//Creating an image
Image image = new
Image("http://www.tutorialspoint.com/green/images/logo.png");
200
JavaFX
imageInput.setX(150);
imageInput.setY(100);
//Setting source for image input
imageInput.setSource(image);
Compile and execute the saved java file from the command prompt using the following
commands.
javac ImageInputEffectExample.java
java ImageInputEffectExample
201
JavaFX
Blend Effect
In general, blend means mixture of two or more different things or substances. If we apply
the blend effect, it will take the pixels of two different inputs. This will be done at the same
location and it produces a combined output based on the blend mode.
For example, if we draw two objects the top object covers the bottom one. On applying
the blend effect, the pixels of the two objects in the overlap area are combined and
displayed based on the input mode.
202
JavaFX
The class named Blend of the package javafx.scene.effect represents the blend effect,
this class contains four properties, which are
bottomInput: This property is of the type Effect and it represents the bottom
input to the blend effect.
topInput: This property is of the type Effect and it represents the top input to the
blend effect.
opacity: This property is of double type and it represents the opacity value
modulated with the top input.
mode: This property is of the type BlendMode and it represents the mode used to
blend the two inputs together.
Example
Following is an example demonstrating the blend effect. In here, we are drawing a circle
filled with BROWN color, on top of it lies a BLUEVIOLET ColorInput.
We have applied the blend effect choosing a multiply mode In the overlap area, the colors
of the two objects were multiplied and displayed.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.effect.Blend;
import javafx.scene.effect.BlendMode;
import javafx.scene.effect.ColorInput;
import javafx.scene.paint.Color;
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the center of the Circle
circle.setCenterX(75.0f);
circle.setCenterY(75.0f);
203
JavaFX
circle.setEffect(blend);
}
public static void main(String args[]){
launch(args);
204
JavaFX
}
}
Compile and execute the saved java file from the command prompt using the following
commands.
javac BlendEffectExample.java
java BlendEffectExample
Blend Modes
In addition to the multiply mode, there are various blend modes in the Blend class. The
following table lists all the various blend modes in JavaFX.
ADD:
1
In this mode, the color values of the top and bottom
inputs are added and displayed.
MULTIPLY:
2
In this mode, the color values of the top and bottom
inputs are multiplied and displayed.
205
JavaFX
DIFFERENCE:
RED:
4
In this mode, the red components of the bottom input
were replaced by the red components of the top input.
BLUE:
5
In this mode, the blue components of the bottom input
were replaced by the blue components of the top input.
GREEN:
EXCLUSION:
COLOR_BURN:
COLOR_DODGE:
206
JavaFX
LIGHTEN:
10
In this mode, the lighter color component, among the
both inputs are displayed.
DARKEN:
11
In this mode, the darker color component, among the
top and bottom inputs is displayed.
SCREEN:
OVERLAY:
HARD_LIGHT:
SOFT_LIGHT:
SRC_ATOP:
SRC_OVER:
17
In this mode, the top input is drawn over the bottom
input
207
JavaFX
Bloom Effect
On applying the bloom effect, pixels in some portions of the node are made to glow.
The class named Bloom of the package javafx.scene.effect represents the bloom effect.
This class contains two properties, which are
input: This property is of the type Effect and it represents an input to the bloom
effect.
threshold: This property is of the type double; this represents a threshold value
of luminosity of the pixels of the node. All those pixels having luminosity greater
than equal to this value are made to glow. The range of the threshold value is 0.0
to 1.0.
Example
Following is an example demonstrating the bloom effect. We will be drawing a text
Welcome to Tutorialspoint and applying the bloom effect to it with a threshold value 1.0.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.Bloom;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
@Override
public void start(Stage stage) {
208
JavaFX
text.setX(60);
text.setY(150);
//Setting the text to be embedded.
text.setText("Welcome to Tutorialspoint");
//Setting the color of the text
text.setFill(Color.DARKSEAGREEN);
209
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac BloomEffectExample.java
java BloomEffectExample
210
JavaFX
Glow Effect
Just like the Bloom Effect, the Glow Effect also makes the given input image to glow. This
effect makes the pixels of the input much brighter.
The class named Glow of the package javafx.scene.effect represents the glow effect.
This class contains two properties namely
input: This property is of the type Effect and it represents an input to the glow
effect.
level: This property is of the type double; it represents intensity of the glow. The
range of the level value is 0.0 to 1.0.
Example
The following program is an example demonstrating the Glow Effect of JavaFX. In here,
we are embedding the following image (Tutorialspoint Logo) in JavaFX scene using Image
and ImageView classes. This will be done at the position 100, 70 and with fit height and
fit width 200 and 400 respectively.
To this image, we are applying the Glow Effect with the level value 0.9. Save this code in
a file with the name GlowEffectExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.Glow;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;
@Override
public void start(Stage stage) {
//Creating an image
Image image = new
Image("http://www.tutorialspoint.com/green/images/logo.png");
211
JavaFX
212
JavaFX
}
}
Compile and execute the saved java file from the command prompt using the following
commands.
javac GlowEffectExample.java
java GlowEffectExample
The class named BoxBlur of the package javafx.scene.effect represents the BoxBlur
effect, this class contains four properties, which are
height: This property is of double type representing the vertical size of the effect.
width: This property is of double type representing the horizontal size of the effect.
213
JavaFX
input: This property is of the type effect and it represents an input to the BoxBlur
effect.
Example
Following is an example demonstrating the box blur effect. In here, we are drawing the
text Welcome to Tutorialspoint filled with DARKSEAGREEN color and applying the Box
Blur effect to it.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.BoxBlur;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
@Override
public void start(Stage stage) {
214
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
215
JavaFX
javac BoxBlurEffectExample.java
java BoxBlurEffectExample
input: This property is of the type Effect and it represents an input to the box
blur effect.
216
JavaFX
radius: This property is of a double type representing the radius with which the
Gaussian Blur effect is to be applied. The blur effect is directly proportional to
radius.
Example
The following program is an example demonstrating the Gaussian blur effect. In this, we
are drawing a text Welcome to Tutorialspoint filled with DARKSEAGREEN color and
applying the Gaussian Blur Effect to it.
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.FontWeight;
import javafx.scene.text.Text;
import javafx.scene.effect.GaussianBlur;
@Override
public void start(Stage stage) {
Compile and execute the saved java file from the command prompt using the following
commands.
javac GaussianBlurEffectExample.java
java GaussianBlurEffectExample
218
JavaFX
As indicated by the name, on applying this effect by specifying some angle, the given input
seems to you as if you are seeing it while it is in motion.
The class named MotionBlur of the package javafx.scene.effect represents the Motion
Blur effect. This class contains three properties, which include
input: This property is of the type Effect and it represents an input to the box
blur effect.
radius: This property is of double type representing the radius with which the
Motion Blur Effect is to be applied.
Angle: This is a property of double type and it represents the angle of the motion
effect in degrees.
Example
The following program is an example demonstrating the Motion Blur Effect. In here, we
are drawing the text Welcome to Tutorialspoint filled with DARKSEAGREEN color and
applying Motion Blur Effect to it with an angle of 45 degrees.
219
JavaFX
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.FontWeight;
import javafx.scene.text.Text;
import javafx.scene.effect.MotionBlur;
@Override
public void start(Stage stage) {
220
JavaFX
text.setEffect(motionBlur);
Compile and execute the saved java file from the command prompt using the following
commands.
javac MotionBlurEffectExample.java
java MotionBlurEffectExample
221
JavaFX
Reflection Effect
On applying the reflection effect to a node in JavaFX, a reflection of it is added at the
bottom of the node.
The class named Reflection of the package javafx.scene.effect represents the reflection
effect. This class contains four properties, which are
input: This property is of the type Effect and it represents an input to the reflection
effect.
topOffset: This property is of double type representing the distance between the
bottom of the input and the top of the reflection.
fraction: This property is of double type representing the fraction of input that is
visible in the output. The range of the fraction value is 0.0 to 1.0.
Example
The following program is an example demonstrating the reflection effect. In here, we are
drawing the text Welcome to Tutorialspoint filled with DARKSEAGREEN color and
applying the reflection effect to it.
222
JavaFX
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.Reflection;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
@Override
public void start(Stage stage) {
223
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac ReflectionEffectExample.java
java ReflectionEffectExample
224
JavaFX
The class named SepiaTone of the package javafx.scene.effect represents the sepia
tone effect, this class contains two properties, which are
level: This property is of double type representing the intensity of this effect.
The range of this property is 0.0 to 1.0.
input: This property is of the type effect and it represents an input to the sepia
tone effect.
Example
The following program is an example demonstrating the Sepia Tone Effect of JavaFX. In
here, we are embedding the following image (tutorialspoint logo) in JavaFX scene using
Image and ImageView classes. This is done at the position 100, 70 along with fit height
and fit width 200 and 400 respectively.
225
JavaFX
To this image, we are applying the Sepia Tone Effect with the level value 0.9. Save this
code in a file with name SepiaToneEffectExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.SepiaTone;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;
//Creating an image
Image image = new Image("http://www.tutorialspoint.com/images/tp-logo.gif");
imageView.setX(150);
imageView.setY(0);
226
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
227
JavaFX
javac SepiaToneEffectExample.java
java SepiaToneEffectExample
Shadow Effect
This effect creates a duplicate of the specified node with blurry edges.
The class named Shadow of the package javafx.scene.effect represents the sepia
tone effect. This class contains six properties, which are
color: This property is of Color type represents the color of the shadow.
blur type: This property is of the BlurType and it represents the type of the blur
effect used to blur the shadow.
radius: This property is of the type double and it represents the radius of the
shadow blur kernel.
width: This property is of the type double and it represents the width of the shadow
blur kernel.
height: This property is of the type double and it represents the height of the
shadow blur kernel.
input: This property is of the type Effect and it represents an input to the shadow
effect.
Example
228
JavaFX
We are applying the shadow effect with the Blur Type Gaussian with the Color Rosy
Brown and Height, Width, Radius as 5.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.BlurType;
import javafx.scene.effect.Shadow;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
@Override
public void start(Stage stage) {
text.setY(50);
//Setting the text to be embedded.
text.setText("Welcome to Tutorialspoint");
//Setting the color of the text
text.setFill(Color.DARKSEAGREEN);
229
JavaFX
//Drawing a Circle
Circle circle = new Circle();
//Setting the center of the circle
circle.setCenterX(300.0f);
circle.setCenterY(160.0f);
//Setting the radius of the circle
circle.setRadius(100.0f);
230
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac ShadowEffectExample.java
java ShadowEffectExample
231
JavaFX
The class named DropShadow of the package javafx.scene.effect represents the drop
shadow effect. This class contains nine properties, which are
color: This property is of Color type representing the color of the shadow.
blur Type: This property is of the type BlurType and it represents the type of
the blur effect used to blur the shadow.
radius: This property is of the type double and it represents the radius of the
shadow blur kernel.
width: This property is of the type double and it represents the width of the shadow
blur kernel.
height: This property is of the type double and it represents the height of the
shadow blur kernel.
input: This property is of the type Effect and it represents an input to the shadow
effect.
spread: This property is of the type double; it represents the spread of the shadow.
offsetX: This property is of the type double and it represents the shadow offset in
the x direction in pixels.
offset: This property is of the type double and it represents the shadow offset in
the y direction in pixels.
Example
The following program is an example demonstrating the drop shadow effect of JavaFX.
In here, we are drawing a text Welcome to Tutorialspoint and a circle in a scene.
To these, we are applying the drop shadow effect. Save this code in a file with the name
DropShadowEffectExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.BlurType;
import javafx.scene.effect.DropShadow;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
232
JavaFX
@Override
public void start(Stage stage) {
text.setText("Welcome to Tutorialspoint");
//Drawing a Circle
Circle circle = new Circle();
//Setting the center of the circle
circle.setCenterX(300.0f);
circle.setCenterY(160.0f);
//Setting the radius of the circle
circle.setRadius(100.0f);
233
JavaFX
dropShadow.setHeight(5);
//Setting the width of the shadow
dropShadow.setWidth(5);
//Setting the radius of the shadow
dropShadow.setRadius(5);
//setting the foffset of the shadow
dropShadow.setOffsetX(3);
dropShadow.setOffsetY(2);
//Setting the spread of the shadow
dropShadow.setSpread(12);
234
JavaFX
}
}
Compile and execute the saved java file from the command prompt using the following
commands.
javac DropShadowEffectExample.java
java DropShadowEffectExample
color: This property is of Color type representing the color of the shadow.
blur Type: This property is of BlurType and it represents the type of blur effect
used to blur the shadow.
radius: This property is of the type double and it represents the radius of the
shadow blur kernel.
width: This property is of the type double and it represents the width of the shadow
blur kernel.
height: This property is of the type double and it represents the height of the
shadow blur kernel.
235
JavaFX
input: This property is of the type Effect and it represents an input to the shadow
effect.
spread: This property is of the type double; it represents the spread of the shadow.
offsetX: This property is of the type double, it represents the shadow offset in the
x direction, in pixels.
offsetY: This property is of the type double, it represents the shadow offset in the
y direction in pixels.
choke: This property is of double type; it represents the choke of the shadow.
Example
The following program is an example demonstrating the inner shadow effect of JavaFX.
In here, we are drawing a text Welcome to Tutorialspoint, and a circle in a scene.
To these, we are applying the inner shadow effect. Save this code in a file with the name
InnerShadowEffectExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.InnerShadow;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
@Override
public void start(Stage stage) {
236
JavaFX
text.setY(50);
//Setting the text to be embedded.
text.setText("Welcome to Tutorialspoint");
//Drawing a Circle
Circle circle = new Circle();
//Setting the center of the circle
circle.setCenterX(300.0f);
circle.setCenterY(160.0f);
//Setting the radius of the circle
circle.setRadius(100.0f);
//setting the fill color of the circle
circle.setFill(Color.CORNFLOWERBLUE);
237
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac InnerShadowEffectExample.java
java InnerShadowEffectExample
238
JavaFX
If we do not mention any source for lighting, it uses the default source of JavaFX.
The class named Lighting of the package javafx.scene.effect represents the lighting
effect, this class contains ten properties, which are
bumpInput: This property is of the type Effect and it represents an optional bump
map input to the lighting effect.
contentInput: This property is of the type Effect and it represents a content input
to the lighting effect.
diffuseConstant: This property is of the type double and it represents the diffuse
constant of the light.
SurfaceScale: This property is of the type double and it represents the surface
scale factor of the light.
Example
The following program is an example demonstrating the lighting effect of JavaFX. In here
we are drawing a text Welcome to Tutorialspoint and a circle in a scene.
To these, we are applying the lighting effect. In here, as we are not mentioning any
source, JavaFX uses its default source.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.Lighting;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.scene.text.Font;
239
JavaFX
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the center of the circle
circle.setCenterX(300.0f);
circle.setCenterY(160.0f);
//Setting the radius of the circle
circle.setRadius(100.0f);
//setting the fill color of the circle
circle.setFill(Color.CORNFLOWERBLUE);
240
JavaFX
circle.setEffect(lighting);
launch(args);
}
}
Compile and execute the saved java file from the command prompt using the following
commands.
javac LightingEffectExample.java
java LightingEffectExample
241
JavaFX
Distant Light Source: A source which is at a far distance from the node. In here, the
light is attenuated in one direction from the source.
242
JavaFX
azimuth: This property is of the type double and it represents the azimuth of the
light.
elevation: This property is of the type double and it represents the elevation of
the light.
Example
The following program is an example demonstrating the lighting effect of JavaFX. In this,
the source of light is a distant source. Here, we are drawing a text Welcome to
Tutorialspoint and a circle in a scene.
To these, we are applying the lighting effect, where the light is being emitted by a
distant source.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.Light;
import javafx.scene.effect.Lighting;
243
JavaFX
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the center of the circle
circle.setCenterX(300.0f);
circle.setCenterY(160.0f);
//Setting the radius of the circle
circle.setRadius(100.0f);
//setting the fill color of the circle
circle.setFill(Color.CORNFLOWERBLUE);
244
JavaFX
launch(args);
}
}
245
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac DistantLightingExample.java
java DistantLightingExample
Spot Light Source: The light from this source attenuates in all directions. The intensity
of the light depends on the distance of the object from the source.
246
JavaFX
The class named Light.Spot of the package javafx.scene.effect represents the distant
light source. This class contains four properties, which are
pointsAtX: This property is of the type double and it represents the x coordinate
of the direction of vector for this light.
pointsAtY: This property is of the type double and it represents the y coordinate
of the direction of vector for this light.
pointsAtZ: This property is of the type double and it represents the z coordinate
of the direction of vector for this light.
Example
The following program is an example demonstrating the lighting effect of JavaFX. In
here, we are drawing a text Welcome to Tutorialspoint and a circle in a scene.
To these, we are applying the lighting effect, where the light is being emitted by a
spotlight.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.Light;
247
JavaFX
import javafx.scene.effect.Lighting;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the center of the circle
circle.setCenterX(300.0f);
circle.setCenterY(160.0f);
//Setting the radius of the circle
circle.setRadius(100.0f);
//setting the fill color of the circle
circle.setFill(Color.CORNFLOWERBLUE);
248
JavaFX
249
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac SpotLightExample.java
java SpotLightExample
250
JavaFX
Point Light Source: The light from this source attenuates in all directions from a single
point the intensity of the light depends on the distance of the object from the source.
The class named Point.Spot of the package javafx.scene.effect represents the point
light source. This class contains four properties, which include
x: This property is of the type double and it represents the x coordinate of the
position of the light.
y: This property is of the type double and it represents the y coordinate of the
position of the light.
z: This property is of the type double and it represents the z coordinate of the
position of the light.
Example
The following program is an example demonstrating the lighting effect of JavaFX. In
here, we are drawing a text Welcome to Tutorialspoint and a circle in a scene.
To these, we are applying the lighting effect, where the light is being emitted by a Point
light source.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.Light;
import javafx.scene.effect.Lighting;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.scene.text.Font;
251
JavaFX
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the center of the circle
circle.setCenterX(300.0f);
circle.setCenterY(160.0f);
//Setting the radius of the circle
circle.setRadius(100.0f);
//setting the fill color of the circle
circle.setFill(Color.CORNFLOWERBLUE);
light.setColor(Color.GRAY);
252
JavaFX
253
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac PointLightExample.java
java PointLightExample
254
8. JavaFX Transformations JavaFX
Transformation means changing some graphics into something else by applying rules. We
can have various types of transformations such as Translation, Scaling Up or Down,
Rotation, Shearing, etc.
Using JavaFX, you can apply transformations on nodes such as rotation, scaling and
translation. All these transformations are represented by various classes and these belong
to the package javafx.scene.transform.
Rotation
1
In rotation, we rotate the object at a particular angle (theta) from its origin.
Scaling
2
To change the size of an object, scaling transformation is used.
Translation
3
Moves an object to a different position on the screen.
Shearing
4 A transformation that slants the shape of an object is called the Shear
Transformation.
Rotation
In rotation, we rotate the object at a particular angle (theta) from its origin. From the
following figure, we can see that the point P(X, Y) is located at angle from the
horizontal X coordinate with distance r from the origin.
255
JavaFX
Example
Following is the program which demonstrates the rotation transformation in JavaFX. In
here, we are creating 2 rectangular nodes at the same location, with the same dimensions
but with different colors (Blurywood and Blue). We are also applying rotation
transformation on the rectangle with Blurywood color.
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.stage.Stage;
@Override
public void start(Stage stage) {
//Drawing Rectangle1
Rectangle rectangle1 = new Rectangle(150, 75, 200, 150);
256
JavaFX
rectangle1.setFill(Color.BLUE);
rectangle1.setStroke(Color.BLACK);
//Drawing Rectangle2
Rectangle rectangle2 = new Rectangle(150, 75, 200, 150);
//Setting the color of the rectangle
rectangle2.setFill(Color.BURLYWOOD);
//Setting the stroke color of the rectangle
rectangle2.setStroke(Color.BLACK);
257
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac RotationExample.java
java RotationExample
Scaling
To change the size of an object, scaling transformation is used. In the scaling process, you
either expand or compress the dimensions of the object. Scaling can be achieved by
multiplying the original coordinates of the object with the scaling factor to get the desired
result.
258
JavaFX
Example
Following is the program which demonstrates scaling in JavaFX. Here, we are creating 2
circles (nodes) at the same location with the same dimensions, but with different colors
(Blurywood and Blue). We are also applying scaling transformation on the circle with a
blue color.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.transform.Scale;
import javafx.stage.Stage;
@Override
public void start(Stage stage) {
//Drawing Circle1
Circle circle1 = new Circle(300, 135, 50);
259
JavaFX
//Drawing Circle2
Circle circle2 = new Circle(300, 135, 50);
//Setting the color of the circle
circle2.setFill(Color.BURLYWOOD);
//Setting the stroke width of the circle
circle2.setStrokeWidth(20);
260
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac ScalingExample.java
java ScalingExample
261
JavaFX
Translation
A translation moves an object to a different position on the screen. You can translate a
point in 2D by adding translation coordinate (tx, ty) to the original coordinate (X, Y) to get
the new coordinate (X, Y).
Example
Following is the program which demonstrates translation in JavaFX. Here, we are creating
2 circles (nodes) at the same location with the same dimensions, but with different colors
(Brown and Cadetblue). We are also applying translation on the circle with a cadetblue
color.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;
//Drawing Circle1
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);
//Drawing Circle2
Circle circle2 = new Circle();
//Setting the position of the circle
circle2.setCenterX(150.0f);
circle2.setCenterY(135.0f);
//Setting the radius of the circle
circle2.setRadius(100.0f);
//Setting the color of the circle
circle2.setFill(Color.CADETBLUE);
//Setting the stroke width of the circle
circle2.setStrokeWidth(20);
263
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac TranslationExample.java
java TranslationExample
264
JavaFX
Shearing
A transformation that slants the shape of an object is called the Shear Transformation.
There are two shear transformations X-Shear and Y-Shear. One shifts the X coordinate
values and the other shifts the Y coordinate values. However, in both the cases only one
coordinate changes its coordinates and the other preserves its values. Shearing is also
termed as Skewing.
265
JavaFX
Example
Following is the program which demonstrates shearing in JavaFX. Here, we are creating 2
polygons (nodes) at the same location, with the same dimensions, but with different colors
(Blue and Transparent). We are also applying shearing on the transparent polygon.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Polygon;
import javafx.scene.transform.Shear;
import javafx.stage.Stage;
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
hexagon1.setFill(Color.BLUE);
hexagon1.setStroke(Color.BLACK);
266
JavaFX
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
hexagon2.setFill(Color.TRANSPARENT);
hexagon2.setStroke(Color.BLACK);
hexagon2.getTransforms().addAll(shear);
267
JavaFX
stage.show();
Compile and execute the saved java file from the command prompt using the following
commands.
javac ShearingExample.java
java ShearingExample
Multiple Transformations
You can also apply multiple transformations on nodes in JavaFX. The following program is
an example which performs Rotation, Scaling and Translation transformations on a
rectangle simultaneously.
import javafx.application.Application;
import javafx.scene.Group;
268
JavaFX
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;
@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);
269
JavaFX
270
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac MultipleTransformationsExample.java
java MultipleTransformationsExample
Transformations on 3D Objects
You can also apply transformations on 3D objects. Following is an example which rotates
and translates a 3-Dimensional box.
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;
@Override
public void start(Stage stage) {
271
JavaFX
//Drawing a Box
Box box = new Box();
272
JavaFX
stage.show();
Compile and execute the saved java file from the command prompt using the following
commands.
javac RotationExample3D.java
java RotationExample3D
273
9. JavaFX Animations JavaFX
In general, animating an object implies creating illusion of its motion by rapid display. In
JavaFX, a node can be animated by changing its property over time. JavaFX provides a
package named javafx.animation. This package contains classes that are used to
animate the nodes. Animation is the base class of all these classes.
Using JavaFX, you can apply animations (transitions) such as Fade Transition, Fill
Transition, Rotate Transition, Scale Transition, Stroke Transition, Translate
Transition, Path Transition, Sequential Transition, Pause Transition, Parallel
Transition, etc.
To apply a particular animation to a node, you have to follow the steps given below:
Finally play the transition using the play() method of the Animation class.
In this chapter, we are going to discuss examples of basic transitions (Rotation, Scaling,
Translation).
Fade Transition
Following is the program which demonstrates Fade Transition in JavaFX. Save this code in
a file with the name FadeTransitionExample.java.
import javafx.animation.FadeTransition;
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;
274
JavaFX
@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(100.0f);
//Setting the color of the circle
circle.setFill(Color.BROWN);
//Setting the stroke width of the circle
circle.setStrokeWidth(20);
275
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac FadeTransitionExample.java
java FadeTransitionExample
276
JavaFX
Fill Transition
Following is the program which demonstrates Fill Transition in JavaFX. Save this code in a
file with the name FillTransitionExample.java.
import javafx.animation.FillTransition;
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;
@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(100.0f);
//Setting the color of the circle
circle.setFill(Color.BROWN);
//Setting the stroke width of the circle
circle.setStrokeWidth(20);
277
JavaFX
fillTransition.setFromValue(Color.BLUEVIOLET);
Compile and execute the saved java file from the command prompt using the following
commands.
278
JavaFX
javac FillTransitionExample.java
java FillTransitionExample
Rotate Transition
Following is the program which demonstrates Rotate Transition in JavaFX. Save this code
in a file with the name 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;
279
JavaFX
//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);
280
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac RotateTransitionExample.java
java RotateTransitionExample
281
JavaFX
Scale Transition
Following is the program which demonstrates Scale Transition in JavaFX. Save this code
in a file with the name 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;
@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);
}
public static void main(String args[]){
launch(args);
}
}
Compile and execute the saved java file from the command prompt using the following
commands.
javac ScaleTransitionExample.java
java ScaleTransitionExample
283
JavaFX
Stroke Transition
Following is the program which demonstrates Stoke Transition in JavaFX. Save this code
in a file with the name StrokeTransitionExample.java.
import javafx.animation.StrokeTransition;
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;
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the position of the circle
284
JavaFX
circle.setCenterX(300.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);
285
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac StrokeTransitionExample.java
java StrokeTransitionExample
Translate Transition
Following is the program which demonstrates Translate Transition in JavaFX. Save this
code in a file with the name TranslateTransitionExample.java.
286
JavaFX
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;
//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);
287
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac TranslateTransitionExample.java
java TranslateTransitionExample
288
JavaFX
Sequential Transition
Following is the program which demonstrates Sequential Transition in JavaFX. Save this
code in a file with the name SequentialTransitionExample.java.
import javafx.animation.PathTransition;
import javafx.animation.ScaleTransition;
import javafx.animation.SequentialTransition;
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.scene.shape.CubicCurveTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.stage.Stage;
import javafx.util.Duration;
@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);
pathTransition.setPath(path);
//Setting the orientation of the path
290
JavaFX
pathTransition.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TAN
GENT);
//Setting the cycle count for the transition
pathTransition.setCycleCount(5);
//Setting auto reverse value to false
pathTransition.setAutoReverse(false);
//Playing the animation
pathTransition.play();
Compile and execute the saved java file from the command prompt using the following
commands.
javac SequentialTransitionExample.java
java SequentialTransitionExample
292
JavaFX
Parallel Transition
Following is the program which demonstrates Parallel Transition in JavaFX. Save this code
in a file with the name parallelTransitionExample.java.
import javafx.animation.ParallelTransition;
import javafx.animation.PathTransition;
import javafx.animation.ScaleTransition;
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.CubicCurveTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;
293
JavaFX
@Override
public void start(Stage stage) {
//Drawing a Rectangle
Rectangle rectangle = new Rectangle();
//Setting the position of the rectangle
rectangle.setX(75.0f);
rectangle.setY(75.0f);
//Setting the width of the rectangle
rectangle.setWidth(100.0f);
//Setting the height of the rectangle
rectangle.setHeight(100.0f);
//setting the color of the rectangle
rectangle.setFill(Color.BLUEVIOLET);
pathTransition.setPath(path);
294
JavaFX
pathTransition.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TAN
GENT);
//Setting the cycle count for the transition
pathTransition.setCycleCount(5);
//Setting auto reverse value to false
pathTransition.setAutoReverse(false);
//Playing the animation
pathTransition.play();
translateTransition.setDuration(Duration.millis(1000));
//Setting the node for the transition
translateTransition.setNode(rectangle);
//Setting the dimensions for scaling
scaleTransition.setByY(1.5);
scaleTransition.setByX(1.5);
//Setting the cycle count for the translaton
scaleTransition.setCycleCount(5);
295
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac parallelTransitionExample.java
java parallelTransitionExample
296
JavaFX
Pause Transition
Following is the program which demonstrates Pause Transition in JavaFX. Save this code
in a file with the name PauseTransitionExample.java.
import javafx.animation.PauseTransition;
import javafx.animation.ScaleTransition;
import javafx.animation.SequentialTransition;
import javafx.animation.TranslateTransition;
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;
@Override
public void start(Stage stage) {
297
JavaFX
//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(50.0f);
//Setting the color of the circle
circle.setFill(Color.BROWN);
//Setting the stroke width of the circle
circle.setStrokeWidth(20);
298
JavaFX
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 translaton
scaleTransition.setCycleCount(5);
//Setting auto reverse value to true
scaleTransition.setAutoReverse(false);
}
}
Compile and execute the saved java file from the command prompt using the following
commands.
javac PauseTransitionExample.java
java PauseTransitionExample
PathTransition
Following is the program which demonstrates Path Transistion in JavaFX. Save this code
in a file with the name PathTransitionExample.java.
import javafx.animation.PathTransition;
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.scene.shape.CubicCurveTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.stage.Stage;
300
JavaFX
import javafx.util.Duration;
//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);
301
JavaFX
pathTransition.setNode(circle);
//Setting the path
pathTransition.setPath(path);
pathTransition.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TAN
GENT);
//Setting the cycle count for the transition
pathTransition.setCycleCount(50);
//Setting auto reverse value to false
pathTransition.setAutoReverse(false);
302
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac PathTransitionExample.java
java PathTransitionExample
Example 2
Following is an example which transforms a circle along a complex path. Save this code in
a file with name PathTransitionExample2.java
import javafx.animation.PathTransition;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
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;
303
JavaFX
@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 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 5th 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);
304
JavaFX
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);
//Playing the animation
pathTransition.play();
305
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac PathTransitionExample2.java
java PathTransitionExample2
306
10. JavaFX Colors JavaFX
Using these classes, you can apply colors in the following patterns
Image Pattern: This lets you to fill the region of the node with an image pattern.
Gradient: In this pattern, the color applied to the node varies from one point to
the other. It has two kinds of gradients namely Linear Gradient and Radial
Gradient.
All those node classes to which you can apply color such as Shape, Text (including Scene),
have methods named setFill() and setStroke(). These will help to set the color values
of the nodes and their strokes respectively.
These methods accept an object of type Paint. Therefore, to create either of these type of
images, you need to instantiate these classes and pass the object as a parameter to these
methods.
In the above code block, we are using the static variables of the color class to create a
color object.
In the same way, you can also use the RGB values or HSB standard of coloring or web
hash codes of colors as shown below
307
JavaFX
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);
Example
Following is an example which demonstrates, how to apply color to the nodes in JavaFX.
Here, we are creating a circle and text nodes and applying colors to them.
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;
@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);
308
JavaFX
//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);
launch(args);
}
}
309
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
Javac ColorExample.java
java ColorExample
image: The object of the image using which you want to create the pattern.
height and width: Double variables representing the height and width of the
image that is used to create a pattern.
310
JavaFX
Example
Following is an example which demonstrates how to apply image pattern to the nodes in
JavaFX. Here, we are creating a circle and a text node and applying an image pattern to
them
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;
@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
311
JavaFX
text.setX(155);
text.setY(50);
312
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
Javac ImagePatternExample.java
java ImagePatternExample
startX, startY: These double properties represent the x and y coordinates of the
starting point of the gradient.
endX, endY: These double properties represent the x and y coordinates of the
ending point of the gradient.
cycleMethod: This argument defines how the regions outside the color gradient
bounds, defined by the starting and ending points, should be filled .
proportional: This is a Boolean Variable; on setting this property to true, the start
and end locations are set to a proportion.
Stops: This argument defines the color-stop points along the gradient line.
313
JavaFX
Example
Following is an example which demonstrates how to apply a gradient pattern to the nodes
in JavaFX. Here, we are creating a circle and a text nodes and applying linear gradient
pattern to them.
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;
circle.setCenterY(180.0f);
circle.setRadius(90.0f);
314
JavaFX
//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);
315
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
Javac LinearGradientExample.java
java LinearGradientExample
The constructor of this class accepts a few parameters, some of which are
startX, startY: These double properties represent the x and y coordinates of the
starting point of the gradient.
endX, endY: These double properties represent the x and y coordinates of the
ending point of the gradient.
cycleMethod: This argument defines how the regions outside the color gradient
bounds are defined by the starting and ending points and how they should be filled.
316
JavaFX
proportional: This is a Boolean Variable; on setting this property to true the start
and end locations are set to a proportion.
Stops: This argument defines the color-stop points along the gradient line.
Example
Following is an example which demonstrates how to apply a radial gradient pattern to the
nodes in JavaFX. Here, we are creating a circle and a text nodes and applying gradient
pattern to them.
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;
@Override
public void start(Stage stage) {
317
JavaFX
//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);
318
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
Javac RadialGradientExample.java
java RadialGradientExample
319
11. JavaFX Images JavaFX
You can load and modify images using the classes provided by JavaFX in the package
javafx.scene.image. JavaFX supports the image formats like Bmp, Gif, Jpeg, Png.
This chapter teaches you how to load images in to JavaFX, how to project an image in
multiple views and how to alter the pixels of an image.
Loading an Image
You can load an image in JavaFX by instantiating the class named Image of the package
javafx.scene.image.
To the constructor of the class, you have to pass either of the following
After loading the image, you can set the view for the image by instantiating the
ImageView class and passing the image to its constructor as follows
Example
Following is an example which demonstrates how to load an image in JavaFX and set the
view.
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;
320
JavaFX
import javafx.scene.image.ImageView;
import javafx.stage.Stage;
@Override
public void start(Stage stage) throws FileNotFoundException {
//Creating an image
Image image = new Image(new FileInputStream("path of the image"));
321
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
Javac ImageExample.java
java ImageExample
322
JavaFX
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;
@Override
public void start(Stage stage) throws FileNotFoundException {
//Creating an image
Image image = new Image(new FileInputStream("file path"));
323
JavaFX
324
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
Javac MultipleViews.java
java MultipleViews
Writing Pixels
JavaFX provides classes named PixelReader and PixelWriter classes to read and write
pixels of an image. The WritableImage class is used to create a writable image.
325
JavaFX
Following is an example which demonstrates how to read and write pixels of an image.
Here, we are reading the color value of an image and making it darker.
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;
@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();
326
JavaFX
}
}
327
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
Javac WritingPixelsExample.java
java WritingPixelsExample
328
12. JavaFX 3D Shapes JavaFX
In the earlier chapters, we have seen how to draw 2D shapes on an XY plane. In addition
to these 2D shapes, we can draw several other 3D shapes as well using JavaFX.
3D Shape
In general, a 3D shape is a geometrical figure that can be drawn on the XYZ plane. These
include a Cylinder, Sphere and a Box.
Each of the above mentioned 3D shape is represented by a class and all these classes
belong to the package javafx.scene.shape. The class named Shape3D is the base class
of all the 3-Dimensional shapes in JavaFX.
Creating a 3D Shape
To create a 3-Dimensional shape, you need to
For example, to draw a 3D box you need to pass its Width, Height, Depth. You can specify
these values using their respective setter methods as follows
329
JavaFX
The following table gives you the list of various 3D shapes provided by JavaFX.
Shape Description
A cylinder is a closed solid that has two parallel (mostly circular) bases
connected by a curved surface.
A sphere is defined as the set of points that are all at the same
distance r from a given point in a 3D space. This distance r is the
radius of the sphere and the given point is the centre of the sphere.
330
JavaFX
3D Shapes Box
A cuboid is a three dimensional or solid shape. Cuboids are made from 6 rectangles, which
are placed at right angles. A cuboid that uses square faces is a cube, if the faces are
rectangles, other than cubes, it looks like a shoe box.
In JavaFX, a 3-dimensional box is represented by a class named Box. This class belongs
to the package javafx.scene.shape.
To draw a cubic curve, you need to pass values to these properties by passing them to the
constructor of this class. This has to be done in the same order at the time of instantiation
as shown below
setWidth(value);
331
JavaFX
setHeight(value);
setDepth(value);
@Override
public void start(Stage primaryStage) throws Exception {
}
}
Pass the Box (node) object, created in the previous step, as a parameter to the constructor
of the Group class. This should be done in order to add it to the group as follows
332
JavaFX
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows:
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
Example
Following is a program which generates a 3D box using JavaFX. Save this code in a file
with the name BoxExample.java.
333
JavaFX
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.Box;
import javafx.stage.Stage;
//Drawing a Box
Box box = new Box();
334
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac BoxExample.java
java BoxExample
3D Shapes Cylinder
A cylinder is a closed solid that has two parallel (mostly circular) bases connected by a
curved surface.
It is described by two parameters, namely the radius of its circular base and the height
of the cylinder as shown in the following diagram
335
JavaFX
setRadius(value);
setHeight(value);
336
JavaFX
@Override
public void start(Stage primaryStage) throws Exception {
}
}
Pass the Cylinder (node) object created in the previous step as a parameter to the
constructor of the Group class. This should be done in order to add it to the group as
follows
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
337
JavaFX
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
Example
The following program shows how to generate a Cylinder using JavaFX. Save this code in
a file with the name CylinderExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.CullFace;
import javafx.scene.shape.Cylinder;
import javafx.stage.Stage;
338
JavaFX
//Drawing a Cylinder
Cylinder cylinder = new Cylinder();
Compile and execute the saved java file from the command prompt using the following
commands.
javac CylinderExample.java
java CylinderExample
339
JavaFX
3D Shapes Sphere
A sphere is a perfectly round geometrical object in a three-dimensional space that is the
surface of a completely round shaped ball.
A sphere is defined as the set of points that are all at the same distance r from a given
point in a 3D space. This distance r is the radius of the sphere and the given point is the
centre of the sphere.
340
JavaFX
In JavaFX, a sphere is represented by a class named Sphere. This class belongs to the
package javafx.scene.shape. By instantiating this class, you can create a sphere node
in JavaFX.
This class has a property named radius of double datatype. It represents the radius of a
Sphere. To draw a Sphere, you need to set values to this property by passing it to the
constructor of this class at the time of instantiation as follows
setRadius(value);
341
JavaFX
Pass the Sphere (node) object, created in the previous step, as a parameter to the
constructor of the Group class. This should be done in order to add it to the group as
shown below
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
342
JavaFX
Example
The following program shows how to generate a Sphere using JavaFX. Save this code in a
file with the name SphereExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.Sphere;
//Drawing a Sphere
sphere.setTranslateX(200);
sphere.setTranslateY(150);
343
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac SphereExample.java
java SphereExample
344
JavaFX
Properties of 3D Objects
For all the 3 Dimensional objects, you can set various properties like Cull Face, Drawing
Mode, Material.
Cull Face
In general, culling is the removal of improperly oriented parts of a shape (which are not
visible in the view area).
The Cull Face property is of the type CullFace and it represents the Cull Face of a 3D
shape. You can set the Cull Face of a shape using the method setCullFace() as shown
below
box.setCullFace(CullFace.NONE);
Example
The following program is an example which demonstrates various cull faces of the sphere.
Save this code in a file with the name 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;
//Drawing Sphere1
Sphere sphere1 = new Sphere();
//Setting the radius of the Sphere
345
JavaFX
sphere1.setRadius(50.0);
//Settong 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);
//Settong 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);
//Settong the position of the sphere
sphere3.setTranslateX(500);
sphere3.setTranslateY(150);
//Setting the cull face of the sphere to none
sphere2.setCullFace(CullFace.NONE);
346
JavaFX
}
public static void main(String args[]){
launch(args);
}
}
Compile and execute the saved Java file from the command prompt using the following
commands.
javac SphereCullFace.java
java SphereCullFace
On executing, the above program generates a JavaFX window displaying three spheres
with cull face values FRONT, BACK and NONE respectively as follows
Drawing Modes
347
JavaFX
It is the property is of the type DrawMode and it represents the drawing mode used to
draw the current 3D shape. You can choose the draw mode to draw a 3D shape using the
method setDrawMode () as follows
box.setDrawMode(DrawMode.FILL);
In JavaFX, you can choose two draw modes to draw a 3D shape, which are
Example
The following program is an example which demonstrates various draw modes of a 3D
box. Save this code in a file with the name 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;
//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);
348
JavaFX
//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 camera
PerspectiveCamera camera = new PerspectiveCamera(false);
camera.setTranslateX(0);
camera.setTranslateY(0);
camera.setTranslateZ(0);
scene.setCamera(camera);
349
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac BoxDrawMode.java
java BoxDrawMode
On executing, the above program generates a JavaFX window displaying two boxes with
draw mode values LINE and FILL respectively, as follows
Material
350
JavaFX
The cull Face property is of the type Material and it is used to choose the surface of the
material of a 3D shape. You can set the material of a 3D shape using the method
setCullFace() as follows
cylinder.setMaterial(material);
As mentioned above for this method, you need to pass an object of the type Material. The
PhongMaterial class of the package javafx.scene.paint is a sub class of this class and
provides 7 properties that represent a Phong shaded material. You can apply all these type
of materials to the surface of a 3D shape using the setter methods of these properties.
Example
Following is an example which displays various materials on the cylinder. Save this code
in a file with the name 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;
@Override
public void start(Stage stage) {
//Drawing Cylinder1
Cylinder cylinder1 = new Cylinder();
//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);
cylinder2.setMaterial(material2);
//Drawing Cylinder3
Cylinder cylinder3 = new Cylinder();
//Setting the properties of the Cylinder
cylinder3.setHeight(130.0f);
cylinder3.setRadius(30.0f);
//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);
//Drawing Cylinder5
353
JavaFX
//Drawing Cylinder6
//Drawing Cylinder7
Cylinder cylinder7 = new Cylinder();
//Setting the properties of the Cylinder
cylinder7.setHeight(130.0f);
cylinder7.setRadius(30.0f);
354
JavaFX
cylinder7.setMaterial(material7);
//Setting camera
PerspectiveCamera camera = new PerspectiveCamera(false);
camera.setTranslateX(0);
camera.setTranslateY(0);
camera.setTranslateZ(-10);
scene.setCamera(camera);
355
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
Javac CylinderMaterials.java
java CylinderMaterials
356
JavaFX
On executing, the above program generates a JavaFX window displaying 7 cylinders with
Materials, Bump Map, Diffuse Map, Self-Illumination Map, Specular Map, Diffuse Color,
Specular Color, (BLANCHEDALMOND) Specular Power, respectively, as shown in the
following screenshot
357
13. JavaFX Event Handling JavaFX
In JavaFX, we can develop GUI applications, web applications and graphical applications.
In such applications, whenever a user interacts with the application (nodes), an event is
said to have been occurred.
For example, clicking on a button, moving the mouse, entering a character through
keyboard, selecting an item from list, scrolling the page are the activities that causes an
event to happen.
Types of Events
The events can be broadly classified into the following two categories:
Foreground Events Those events which require the direct interaction of a user.
They are generated as consequences of a person interacting with the graphical
components in a Graphical User Interface. For example, clicking on a button,
moving the mouse, entering a character through keyboard, selecting an item from
list, scrolling the page, etc.
Background Events Those events that require the interaction of end user are
known as background events. The operating system interruptions, hardware or
software failure, timer expiry, operation completion are the example of background
events.
Events in JavaFX
JavaFX provides support to handle a wide varieties of events. The class named Event of
the package javafx.event is the base class for an event.
An instance of any of its subclass is an event. JavaFX provides a wide variety of events.
Some of them are are listed below.
Mouse Event: This is an input event that occurs when a mouse is clicked. It is
represented by the class named MouseEvent. It includes actions like mouse
clicked, mouse pressed, mouse released, mouse moved, mouse entered target,
mouse exited target, etc.
Key Event: This is an input event that indicates the key stroke occurred on a node.
It is represented by the class named KeyEvent. This event includes actions like
key pressed, key released and key typed.
Drag Event: This is an input event which occurs when the mouse is dragged. It is
represented by the class named DragEvent. It includes actions like drag entered,
drag dropped, drag entered target, drag exited target, drag over, etc.
358
JavaFX
Event Handling
Event Handling is the mechanism that controls the event and decides what should happen,
if an event occurs. This mechanism has the code which is known as an event handler that
is executed when an event occurs.
JavaFX provides handlers and filters to handle events. In JavaFX every event has
Target: The node on which an event occurred. A target can be a window, scene,
and a node.
Source: The source from which the event is generated will be the source of the
event. In the above scenario, mouse is the source of the event.
Type: Type of the occurred event; in case of mouse event mouse pressed, mouse
released are the type of events.
Assume that we have an application which has a Circle, Stop and Play Buttons inserted
using a group object as follows
If you click on the play button, the source will be the mouse, the target node will be the
play button and the type of the event generated is the mouse click.
Route Construction
Whenever an event is generated, the default/initial route of the event is determined by
construction of an Event Dispatch chain. It is the path from the stage to the source
Node.
Following is the event dispatch chain for the event generated, when we click on the play
button in the above scenario.
359
JavaFX
As mentioned above, during the event, processing is a filter that is executed and during
the event bubbling phase, a handler is executed. All the handlers and filters implement
the interface EventHandler of the package javafx.event.
In the same way, you can remove a filter using the method removeEventFilter() as
shown below:
circle.removeEventFilter(MouseEvent.MOUSE_CLICKED, eventHandler);
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;
361
JavaFX
import javafx.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);
362
JavaFX
}
};
Compile and execute the saved java file from the command prompt using the following
commands.
javac EventFiltersExample.java
java EventFiltersExample
363
JavaFX
In the same way, you can remove an event handler using the method
removeEventHandler() as shown below:
364
JavaFX
circle.removeEventHandler(MouseEvent.MOUSE_CLICKED, eventHandler);
Example
The following program is an example demonstrating the event handling in JavaFX using
the event handlers.
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;
box.setTranslateX(350);
box.setTranslateY(150);
box.setTranslateZ(50);
366
JavaFX
367
JavaFX
//Setting camera
PerspectiveCamera camera = new PerspectiveCamera(false);
camera.setTranslateX(0);
camera.setTranslateY(0);
camera.setTranslateZ(0);
scene.setCamera(camera);
Compile and execute the saved java file from the command prompt using the following
commands.
javac EventHandlersExample.java
java EventHandlersExample
368
JavaFX
On executing, the above program generates a JavaFX window displaying a text field and
a 3D box as shown below
Here, if you type a letter in the text field, the 3D box starts rotating along the x axis. If
you click on the box again the rotation stops.
Most of these methods exist in the classes like Node, Scene, Window, etc., and they are
available to all their sub classes.
For example, to add a mouse event listener to a button, you can use the convenience
method setOnMouseClicked() as shown below.
playButton.setOnMouseClicked((new EventHandler<MouseEvent>() {
public void handle(MouseEvent event) {
System.out.println("Hello World");
pathTransition.play();
}
}));
369
JavaFX
Example
The following program is an example that demonstrates the event handling in JavaFX using
the convenience methods.
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;
//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);
//Creating a Path
Path path = new Path();
//Moving to the starting 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);
pathTransition.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TAN
GENT);
//Setting the cycle count for the transition
pathTransition.setCycleCount(50);
371
JavaFX
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>() {
pathTransition.play();
}
}));
stopButton.setOnMouseClicked((new EventHandler<MouseEvent>() {
372
JavaFX
}
}));
Compile and execute the saved java file from the command prompt using the following
commands.
javac ConvenienceMethodsExample.java
java ConvenienceMethodsExample
373
JavaFX
On executing, the above program generates a JavaFX window as shown below. Here click
on the play button to start the animation and click on the stop button to stop the animation.
374
14. JavaFX Controls (UI controls) JavaFX
UI elements: These are the core visual elements which the user eventually sees
and interacts with. JavaFX provides a huge list of widely used and common
elements varying from basic to complex, which we will cover in this tutorial.
Layouts: They define how UI elements should be organized on the screen and
provide a final look and feel to the GUI (Graphical User Interface). This part will be
covered in the Layout chapter.
Behavior: These are events which occur when the user interacts with UI elements.
This part will be covered in the Event Handling chapter.
Each control is represented by a class; you can create a control by instantiating its
respective class.
Following is the list of commonly used controls while the GUI is designed using JavaFX.
Label
1
A Label object is a component for placing text.
Button
2
This class creates a labeled button.
ColorPicker
CheckBox
375
JavaFX
RadioButton
ListView
6
A ListView component presents the user with a scrolling list of text items.
TextField
7 A TextField object is a text component that allows for the editing of a single
line of text.
PasswordField
8
A PasswordField object is a text component specialized for password entry.
Scrollbar
FileChooser
10 A FileChooser control represents a dialog window from which the user can
select a file.
ProgressBar
11 As the task progresses towards completion, the progress bar displays the
task's percentage of completion.
Slider
12 A Slider lets the user graphically select a value by sliding a knob within a
bounded interval.
Example
The following program is an example which displays a login page in JavaFX. Here, we are
using the controls label, text field, password field and button.
376
JavaFX
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;
@Override
public void start(Stage stage) {
//Creating Buttons
Button button1 = new Button("Submit");
Button button2 = new Button("Clear");
377
JavaFX
//Styling nodes
button1.setStyle("-fx-background-color: darkslateblue; -fx-text-fill:
white;");
button2.setStyle("-fx-background-color: darkslateblue; -fx-text-fill:
white;");
gridPane.setStyle("-fx-background-color: BEIGE;");
378
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac LoginPage.java
java LoginPage
379
JavaFX
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;
@Override
public void start(Stage stage) {
380
JavaFX
no.setToggleGroup(groupReservation);
381
JavaFX
gridPane.add(dobLabel, 0, 1);
gridPane.add(datePicker, 1, 1);
gridPane.add(genderLabel, 0, 2);
gridPane.add(maleRadio, 1, 2);
382
JavaFX
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
383
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac Registration.java
java Registration
384
JavaFX
385
15. JavaFX Charts JavaFX
In general, a chart is a graphical representation of data. There are various kinds of charts
to represent data such as Bar Chart, Pie Chart, Line Chart, Scatter Chart, etc.
JavaFX Provides support for various Pie Charts and XY Charts. The charts that are
represented on an XYplane include AreaChart, BarChart, BubbleChart, LineChart,
ScatterChart, StackedAreaChart, StackedBarChart, etc.
Each chart is represented by a class and all these charts belongs to the package
javafx.scene.chart. The class named Chart is the base class of all the charts in JavaFX
and the XYChart is base class of all those charts that are drawn on the XYplane.
Creating a Chart
To create a chart, you need to
As observed in the above code, while instantiating, you need to pass two objects
representing the X and Y axis of the chart respectively.
386
JavaFX
CategoryAxis: By instantiating this class, you can define (create) an X or Y axis along
which each value represents a category. You can define a Category axis by instantiating
this class as shown below
387
JavaFX
To this axis, you need set the list of categories and label to the axis as shown below
NumberAxis: By instantiating this class, you can define (create) an X or Y axis along
which each value represents a Numerical value. You can use any Number type with this
Axis, Long, Double, BigDecimal, etc. You can define a Number axis by instantiating this
class as follows:
The <X,Y> class of the javafx.scene.chart package is a class using which, you can send
data to a chart. This class holds an observable list of named series. You can get this list
using the getData() method of XYChart.Series class as shown below
Where, series is the object of the XYChart.Series class. You can add data to this list
using the add() method as follows
388
JavaFX
The following table gives a description of various charts (classes) provided by JavaFX
Line Chart: A line chart or line graph displays information as a series of data
points (markers) connected by straight line segments. Line Chart shows how
the data changes at equal time frequency.
2
In JavaFX, a line chart is represented by a class named LineChart. This class
belongs to the package javafx.scene.chart. By instantiating this class, you
can create a LineChart node in JavaFX.
Area Chart: Area charts are used to draw area based charts. It plots the area
between the given series of points and the axis. In general, this chart is used
to compare two quantities.
3
In JavaFX, an Area chart is represented by a class named AreaChart. This
class belongs to the package javafx.scene.chart. By instantiating this class,
you can create a AreaChart node in JavaFX.
Bar Chart: A bar chart is used to represent grouped data using rectangular
bars. The length of these bars depicts the values. The bars in the bar chart can
be plotted vertically or horizontally.
4
In JavaFX, a Bar chart is represented by a class named BarChart. This class
belongs to the package javafx.scene.chart. By instantiating this class, you
can create a BarChart node in JavaFX.
Bubble Chart: A bubble chart is used to plat three-dimensional data. The third
dimension will be represented by the size (radius) of the bubble.
5
In JavaFX, a Bubble chart is represented by a class named BubbleChart. This
class belongs to the package javafx.scene.chart. By instantiating this class,
you can create a BubbleChart node in JavaFX.
389
JavaFX
Scatter Chart: A scatterplot is a type of graph which uses values from two
variables plotted in a Cartesian plane. It is usually used to find out the
relationship between two variables.
6
In JavaFX, a Scatter chart is represented by a class named ScatterChart. This
class belongs to the package javafx.scene.chart. By instantiating this class,
you can create a ScatterChart node in JavaFX.
Following is a Pie Chart depicting the mobile sales of various companies at an instance.
390
JavaFX
In JavaFX, a pie chart is represented by a class named PieChart. This class belongs to
the package javafx.scene.chart.
clockwise: This is a Boolean Operator; on setting this operator true, the data slices
in the pie charts will be arranged clockwise starting from the start angle of the pie
chart.
data: This represents an ObservableList object, which holds the data of the pie
chart.
labelsVisible: This is a Boolean Operator; on setting this operator true, the labels
for the pie charts will be drawn. By default, this operator is set to be true.
startAngle: This is a double type operator, which represents the angle to start the
first pie slice at.
To generate a pie chart, prepare an ObservableList object as shown in the following code
block
Or, by using the method named setData() of the class named PieChart of the package
named javafx.scene.chart.
pieChart.setData(pieChartData);
@Override
public void start(Stage primaryStage) throws Exception {
}
}
ObservableList<PieChart.Data> pieChartData =
FXCollections.observableArrayList(
new PieChart.Data("Iphone 5S", 13),
new PieChart.Data("Samsung Grand", 25),
new PieChart.Data("MOTO G", 10),
new PieChart.Data("Nokia Lumia", 22));
392
JavaFX
Pass the PieChart (node) object, created in the previous step as a parameter to the
constructor of the Group class. This should be done in order to add it to the group as
follows
In addition to the root object, you can also pass two double parameters representing
height and width of the screen, along with the object of the Group class as shown below.
393
JavaFX
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
Example
The table given below depicts mobile sale with the help of a pie chart. The following table
has a list of different mobile brands and their sale (units per day).
394
JavaFX
Following is a Java program which generates a pie chart, depicting the above data using
JavaFX. Save this code in a file with the name PieChartExample.java.
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.chart.PieChart;
@Override
public void start(Stage stage) {
395
JavaFX
pieChart.setStartAngle(180);
}
public static void main(String args[]){
launch(args);
}
}
Compile and execute the saved java file from the command prompt using the following
commands.
javac PieChartExample.java
java PieChartExample
396
JavaFX
On executing, the above program generates a JavaFX window displaying a pie chart as
shown below.
397
JavaFX
In JavaFX, a line chart is represented by a class named LineChart. This class belongs to
the package javafx.scene.chart. By instantiating this class, you can create a LineChart
node in JavaFX.
To generate a line chart in JavaFX, you should follow the steps given below.
In our example, the X axis represent the years starting from 1960 to 2020 having major
tick mark at every ten years.
398
JavaFX
//Defining X axis
NumberAxis xAxis = new NumberAxis(1960, 2020, 10);
xAxis.setLabel("Years");
//Defining y axis
NumberAxis yAxis = new NumberAxis(0, 350, 50);
yAxis.setLabel("No.of schools");
399
JavaFX
Pass the LineChart (node) object, created in the previous step as a parameter to the
constructor of the Group class. This should be done in order to add it to the group as
follows
In addition to the root object, you can also pass two double parameters representing
height and width of the screen along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
400
JavaFX
Example
The following table depicts the number of schools that were in an area from the year 1970
to 2014.
1970 15
1980 30
1990 60
2000 120
2013 240
2014 300
Following is a Java program which generates a line chart, depicting the above data, using
JavaFX.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
@Override
public void start(Stage stage) {
401
JavaFX
402
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac LineChartExample.java
java LineChartExample
On executing, the above program generates a JavaFX window displaying a line chart as
shown below.
403
JavaFX
Following is an Area chart depicting the number of fruits consumed by two people in a
week.
In JavaFX, an Area chart is represented by a class named AreaChart. This class belongs
to the package javafx.scene.chart. By instantiating this class, you can create an
AreaChart node in JavaFX.
404
JavaFX
Pass the AreaChart (node) object, created in the previous step as a parameter to the
constructor of the Group class. This should be done in order to add it to the group as
follows
In addition to the root object, you can also pass two double parameters representing
height and width of the screen, along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
406
JavaFX
You can add a Scene object to the stage using the method setScene() of the class named
Stage. Add the Scene object prepared in the previous steps using the following method.
primaryStage.setScene(scene);
primaryStage.show();
Launch the JavaFX application by calling the static method launch() of the Application
class from the main method as follows.
Example
The following table depicts the number of fruits consumed by John and Jane in a week.
Monday 3 1
Tuesday 4 3
Wednesday 3 4
Thursday 5 3
Friday 4 3
Saturday 10 5
Sunday 12 4
Following is a Java program which generates an area chart, depicting the above data using
JavaFX.
407
JavaFX
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.AreaChart;
import javafx.scene.chart.CategoryAxis;
import javafx.stage.Stage;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
@Override
public void start(Stage stage) {
408
JavaFX
409
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac AreaChartExample.java
java AreaChartExample
On executing, the above program generates a JavaFX window displaying an area chart as
shown below.
410
JavaFX
In JavaFX, a Bar chart is represented by a class named BarChart. This class belongs to
the package javafx.scene.chart. By instantiating this class, you can create an BarChart
node in JavaFX.
@Override
public void start(Stage primaryStage) throws Exception {
411
JavaFX
xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList("S
peed", "User rating", "Milage", "Safety")));
xAxis.setLabel("category");
412
JavaFX
Pass the BarChart (node) object, created in the previous step as a parameter to the
constructor of the Group class. This should be done in order to add it to the group as
follows
In addition to the root object, you can also pass two double parameters representing
height and width of the screen, along with the object of the Group class as follows.
413
JavaFX
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
Example
The following example depicts various car statistics with the help of a bar chart. Following
is a list of car brands along with their different characteristics, which we will show using a
bar chart:
414
JavaFX
Following is a Java program which generates a bar chart, depicting the above data using
JavaFX.
import java.util.Arrays;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.stage.Stage;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
415
JavaFX
416
JavaFX
launch(args);
}
}
Compile and execute the saved java file from the command prompt using the following
commands.
javac BarChartExample.java
java BarChartExample
On executing, the above program generates a JavaFX window displaying an area chart as
shown below.
417
JavaFX
@Override
public void start(Stage primaryStage) throws Exception {
}
}
418
JavaFX
//Defining Y axis
NumberAxis yAxis = new NumberAxis(20, 100, 10);
yAxis.setLabel("Weight");
series.getData().add(new XYChart.Data(10,30,4));
series.getData().add(new XYChart.Data(25,40,5));
series.getData().add(new XYChart.Data(40,50,9));
series.getData().add(new XYChart.Data(55,60,7));
series.getData().add(new XYChart.Data(70,70,9));
series.getData().add(new XYChart.Data(85,80,6));
419
JavaFX
Pass the BubbleChart (node) object, created in the previous step as a parameter to the
constructor of the Group class. This should be done in order to add it to the group as
follows -
In addition to the root object, you can also pass two double parameters representing
height and width of the screen, along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
420
JavaFX
Example
Let us consider different persons along with their age, weight and work capacities. The
work capacity can be treated as the number of hours that is plotted as bubbles in the
chart.
WEIGHT
30 40 50 60 70 80
10 4
25 5
AGE 40 6
WORK
55 8
70 9
85 15
Following is a Java program which generates a bubble chart, depicting the above data
using JavaFX.
421
JavaFX
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.BubbleChart;
import javafx.stage.Stage;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
@Override
public void start(Stage stage) {
series.getData().add(new XYChart.Data(10,30,4));
series.getData().add(new XYChart.Data(25,40,5));
series.getData().add(new XYChart.Data(40,50,9));
series.getData().add(new XYChart.Data(55,60,7));
series.getData().add(new XYChart.Data(70,70,9));
series.getData().add(new XYChart.Data(85,80,6));
422
JavaFX
bubbleChart.getData().add(series);
Compile and execute the saved java file from the command prompt using the following
commands.
javac BubbleChartExample.java
java BubbleChartExample
423
JavaFX
On executing, the above program generates a JavaFX window displaying a bubble chart
as shown below.
424
JavaFX
@Override
public void start(Stage primaryStage) throws Exception {
426
JavaFX
Pass the ScatterChart (node) object created in the previous step as a parameter to the
constructor of the Group class. This should be done in order to add it to the group as
follows
In addition to the Root Object, you can also pass two double parameters representing
height and width of the screen, along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
427
JavaFX
Example
The following table contains sample data plotted between area and weight.
Area Weight
8 12
5.5
4
11 14
5
4
3 3.5
6.5 7
Following is a Java program which generates a scatter chart depicting the above data using
JavaFX.
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.ScatterChart;
import javafx.scene.chart.XYChart;
@Override
public void start(Stage stage) {
428
JavaFX
xAxis.setLabel("Area");
429
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac ScatterChartExample.java
java ScatterChartExample
On executing, the above program generates a JavaFX window displaying a scatter chart
as shown below.
Source: wikipedia.org
To generate a stacked area chart in JavaFX, follow the steps given below.
431
JavaFX
xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList("1
750", "1800", "1850", "1900", "1950", "1999", "2050" )));
432
JavaFX
433
JavaFX
Pass the StackedAreaChart (node) object created in the previous step as a parameter to
the constructor of the Group class. This should be done in order to add it to the group as
follows
In addition to the root object, you can also pass two double parameters representing
height and width of the screen, along with the object of the Group class as follows.
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
Display the contents of the scene using the method named show() of the Stage class as
follows.
primaryStage.show();
Example
The following table lists out the population of different continents from year 1750 till year
2050.
1750
502 106 163 18 2
1800
635 107 203 31 2
1850
809 111 276 54 2
1900
947 133 408 156 6
1950
1402 221 547 339 13
1999
3634 767 729 818 30
2050 5268 46
1766 628 1201
Following is a Java program which generates a stacked area chart depicting the above
data using JavaFX.
import java.util.Arrays;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.collections.FXCollections;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.stage.Stage;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.StackedAreaChart;
import javafx.scene.chart.XYChart;
@Override
public void start(Stage stage) {
xAxis.setCategories(FXCollections.<String>observableArrayList(
Arrays.asList("1750", "1800", "1850", "1900", "1950", "1999",
"2050" )));
436
JavaFX
series3.setName("Europe");
437
JavaFX
438
JavaFX
launch(args);
}
}
Compile and execute the saved java file from the command prompt using the following
commands.
javac StackedAreaChartExample.java
java StackedAreaChartExample
On executing, the above program generates a JavaFX window displaying a stacked area
chart as shown below.
The following is a Stacked Bar Chart, which depicts the population growth.
439
JavaFX
Source: Wikipedia.org
To generate a Stacked Bar Chart in JavaFX, follow the steps given below.
440
JavaFX
xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList("A
frica", "America", "Asia", "Europe", "Oceania")));
xAxis.setLabel("category");
series2.setName("1900");
series2.getData().add(new XYChart.Data<>("Africa", 133));
series2.getData().add(new XYChart.Data<>("America", 156));
series2.getData().add(new XYChart.Data<>("Asia", 947));
series2.getData().add(new XYChart.Data<>("Europe", 408));
series1.getData().add(new XYChart.Data<>("Oceania", 6));
Pass the StackedBarChart (node) object created in the previous step as a parameter to
the constructor of the Group class. This should be done in order to add it to the group as
follows
In addition to the root object, you can also pass two double parameters representing
height and width of the screen, along with the object of the Group class as follows.
442
JavaFX
Using the primaryStage object, set the title of the scene as Sample Application as
follows.
primaryStage.setTitle("Sample Application");
primaryStage.setScene(scene);
primaryStage.show();
Example
The following table lists out the population in various continents in the years 1800, 1900
and 2008.
443
JavaFX
1800
107 31 635 203 2
1900
133 156 947 408 6
2008
973 914 4054 732 34
Following is a Java program that generates a stacked bar chart depicting the above data,
using JavaFX.
import java.util.Arrays;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.stage.Stage;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.StackedBarChart;
import javafx.scene.chart.XYChart;
@Override
public void start(Stage stage) {
xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList("A
frica", "America", "Asia", "Europe", "Oceania")));
xAxis.setLabel("category");
444
JavaFX
series1.setName("1800");
series1.getData().add(new XYChart.Data<>("Africa", 107));
series1.getData().add(new XYChart.Data<>("America", 31));
445
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac StackedBarChartExample.java
java StackedBarChartExample
446
JavaFX
On executing, the above program generates a JavaFX window displaying an area chart as
shown below.
447
16. JavaFX Layout Panes (Containers) JavaFX
After constructing all the required nodes in a scene, we will generally arrange them in
order.
This arrangement of the components within the container is called the Layout of the
container. We can also say that we followed a layout as it includes placing all the
components at a particular position within the container.
JavaFX provides several predefined layouts such as HBox, VBox, Border Pane, Stack
Pane, Text Flow, Anchor Pane, Title Pane, Grid Pane, Flow Panel, etc.
Each of the above mentioned layout is represented by a class and all these classes
belongsto the package javafx.layout. The class named Pane is the base class of all the
layouts in JavaFX.
Creating a Layout
To create a layout, you need to
Create nodes.
Instantiate the respective class of the required layout.
Set the properties of the layout.
Add all the created nodes to the layout.
Creating Nodes
First of all, create the required nodes of the JavaFX application by instantiating their
respective classes.
For example, if you want to have a text field and two buttons namely, play and stop in a
HBox layout - you will have to initially create those nodes as shown in the following code
block:
For Example, if you want to create a Hbox layout, you need to instantiate this class as
follows.
448
JavaFX
For example: If you want to set space between the created nodes in the HBox layout, then
you need to set value to the property named spacing. This can be done by using the setter
method setSpacing() as shown below
hbox.setSpacing(10);
Layout Panes
Following are the various Layout panes (classes) provided by JavaFX. These classes exist
in the package javafx.scene.layout.
HBox: The HBox layout arranges all the nodes in our application in a single
horizontal row.
1
The class named HBox of the package javafx.scene.layout represents
the text horizontal box layout.
VBox: The VBox layout arranges all the nodes in our application in a single
vertical column.
2
The class named VBox of the package javafx.scene.layout represents the
text Vertical box layout.
449
JavaFX
BorderPane: The Border Pane layout arranges the nodes in our application
in top, left, right, bottom and center positions.
3
The class named BorderPane of the package javafx.scene.layout
represents the border pane layout.
StackPane: The stack pane layout arranges the nodes in our application
on top of another just like in a stack. The node added first is placed at the
bottom of the stack and the next node is placed on top of it.
4
The class named StackPane of the package javafx.scene.layout
represents the stack pane layout.
TextFlow: The Text Flow layout arranges multiple text nodes in a single
flow.
5
The class named TextFlow of the package javafx.scene.layout
represents the text flow layout.
AnchorPane: The Anchor pane layout anchors the nodes in our application
at a particular distance from the pane.
6
The class named AnchorPane of the package javafx.scene.layout
represents the Anchor Pane layout.
TilePane: The Tile Pane layout adds all the nodes of our application in the
form of uniformly sized tiles.
7
The class named TilePane of the package javafx.scene.layout represents
the TilePane layout.
GridPane: The Grid Pane layout arranges the nodes in our application as a
grid of rows and columns. This layout comes handy while creating forms
using JavaFX.
8
The class named GridPane of the package javafx.scene.layout
represents the GridPane layout.
450
JavaFX
FlowPane: The flow pane layout wraps all the nodes in a flow. A horizontal
flow pane wraps the elements of the pane at its height, while a vertical flow
pane wraps the elements at its width.
9
The class named FlowPane of the package javafx.scene.layout
represents the Flow Pane layout.
HBox
If we use HBox in the layout in our application, all the nodes are set in a single horizontal
row.
The class named HBox of the package javafx.scene.layout represents the HBox pane.
This class contains five properties namely
alignment: This property represents the alignment of the nodes in the bounds of
the HBox. You can set value to this property using the setter method
setAlignment().
fillHeight: This property is of Boolean type and on setting this to true, the
resizable nodes in the HBox are resized to the height of the HBox. You can set value
to this property using the setter method setFillHeight().
spacing: This property is of double type and it represents the space between the
children of the HBox. You can set value to this property using the setter method
setSpacing().
In addition to these, this class also provides a couple of methods, which are
setHgrow(): Sets the horizontal grow priority for the child when contained by an
HBox. This method accepts a node and a priority value.
setMargin(): Using this method, you can set margins to the HBox. This method
accepts a node and an object of the Insets class (A set of inside offsets for the 4
side of a rectangular area).
Example
The following program is an example of the HBox layout. Here, we are inserting a text
field and two buttons, play and stop. This is done with a spacing of 10 and each having
margins with dimensions (10, 10, 10, 10).
import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
451
JavaFX
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import javafx.scene.layout.HBox;
452
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac HBoxExample.java
java HBoxExample.java
VBox
If we use VBox as the layout in our application, all the nodes are set in a single vertical
column.
The class named VBox of the package javafx.scene.layout represents the VBox pane.
This class contains five properties, which are
alignment: This property represents the alignment of the nodes inside the bounds
of the VBox. You can set value to this property by using the setter method
setAlignment().
453
JavaFX
fillHeight: This property is of Boolean type and on setting this to be true; the
resizable nodes in the VBox are resized to the height of the HBox. You can set value
to this property using the setter method setFillHeight().
spacing: This property is of double type and it represents the space between the
children of the VBox. You can set value to this property using the setter method
setSpacing().
setHgrow(): Sets the horizontal grow priority for the child when contained by a
VBox. This method accepts a node and a priority value.
setMargin(): Using this method, you can set margins to the VBox. This method
accepts a node and an object of the Insets class (A set of inside offsets for the 4
sides of a rectangular area)
Example
The following program is an example of the VBox layout. In this, we are inserting a text
field and two buttons, play and stop. This is done with a spacing of 10 and each having
margins with dimensions (10, 10, 10, 10).
import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import javafx.scene.layout.VBox;
Compile and execute the saved java file from the command prompt using the following
commands.
455
JavaFX
javac VBoxExample.java
java VBoxExample.java
BorderPane
If we use the BorderPane, the nodes are arranged in the Top, Left, Right, Bottom and
Center positions.
bottom: This property is of Node type and it represents the node placed at the
bottom of the BorderPane. You can set value to this property using the setter
method setBottom().
center: This property is of Node type and it represents the node placed at the
center of the BorderPane. You can set value to this property using the setter
method setCenter().
left: This property is of Node type and it represents the node placed at the left of
the BorderPane. You can set value to this property using the setter method
setLeft().
right: This property is of Node type and it represents the node placed at the right
of the BorderPane. You can set value to this property using the setter method
setRight().
top: This property is of Node type and it represents the node placed at the top of
the BorderPane. You can set value to this property using the setter method
setTop().
setAlignment(): This method is used to set the alignment of the nodes belonging
to this pane. This method accepts a node and a priority value.
Example
The following program is an example of the BorderPane layout. In this, we are inserting
a five text fields in the Top, Bottom, Right, Left and Center positions.
import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
@Override
public void start(Stage stage) {
//Setting the top, bottom, center, right and left nodes to the pane
bPane.setTop(new TextField("Top"));
bPane.setBottom(new TextField("Bottom"));
bPane.setLeft(new TextField("Left"));
bPane.setRight(new TextField("Right"));
bPane.setCenter(new TextField("Center"));
//Creating a scene object
Scene scene = new Scene(bPane);
457
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac BorderPaneExample.java
java BorderPaneExample
StackPane
If we use the Stack Pane, the nodes are arranged on top of another, just like in stack. The
node added first is placed at the bottom of the stack and the next node is placed on top
of it.
In addition to these, this class also provides a method named setMargin(). This method
is used to set margin for the node within the stack pane.
Example
The following program is an example of the StackPane layout. In this, we are inserting a
Circle, Sphere and a Text in the same order.
import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Sphere;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle(300, 135, 100);
circle.setFill(Color.DARKSLATEBLUE);
circle.setStroke(Color.BLACK);
//Drawing Sphere
Sphere sphere = new Sphere(50);
//creating a text
Text text = new Text("Hello how are you");
//Setting the font of the text
459
JavaFX
//Creating a Stackpane
StackPane stackPane = new StackPane();
//Setting the margin for the circle
stackPane.setMargin(circle, new Insets(50, 50, 50, 50));
Compile and execute the saved java file from the command prompt using the following
commands.
460
JavaFX
javac StackPaneExample.java
java StackPaneExample
FlowPane
If we use flow pane in our application, all the nodes are wrapped in a flow. A horizontal
flow pane wraps the elements of the pane at its height, while a vertical flow pane wraps
the elements at its width.
The class named FlowPane of the package javafx.scene.layout represents the Flow
Pane. This class contains 7 properties, which includes
alignment: This property represents the alignment of the contents of the Flow
pane. You can set this property using the setter method setAllignment().
461
JavaFX
Hgap: This property is of double type and it represents the horizontal gap between
the rows/columns of a flow pane.
Vgap: This property is of double type and it represents the vertical gap between
the rows/columns of a flow pane.
Example
The following program is an example of the FlowPane layout. In this, we are inserting
four button in the horizontal flow pane.
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.FlowPane;
import javafx.scene.shape.Sphere;
import javafx.stage.Stage;
@Override
public void start(Stage stage) {
//Creating button1
Button button1 = new Button("Button1");
//Creating button2
Button button2 = new Button("Button2");
//Creating button3
462
JavaFX
launch(args);
}
}
Compile and execute the saved java file from the command prompt using the following
commands.
javac FlowPaneExample.java
463
JavaFX
java FlowPaneExample
AnchorPane
The Anchor Pane allows the edges of child nodes to be anchored to an offset from the
anchor pane's edges. If the anchor pane has a border and/or padding set, the offsets will
be measured from the inside edge of those insets.
If we use an Anchor pane in our application, the nodes in it are anchored at a particular
distance from the pane.
Example
The following program is an example of the Anchor Pane layout. In this, we are inserting
a rotating cylinder in an anchor pane. At the same time, we are setting it at a distance of
50 units from the pane from all directions (Top, Left, Right, Bottom).
import javafx.animation.RotateTransition;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Cylinder;
import javafx.scene.transform.Rotate;
import javafx.stage.Stage;
import javafx.util.Duration;
464
JavaFX
@Override
public void start(Stage stage) {
//Drawing a Cylinder
Cylinder cylinder = new Cylinder();
//Setting the properties of the Cylinder
cylinder.setHeight(180.0f);
cylinder.setRadius(100.0f);
465
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
466
JavaFX
javac AnchorPaneExample.java
java AnchorPaneExample
TextFlow
If we use this layout, you can set multiple text nodes in a single flow. The class named
textFlow of the package javafx.scene.layout represents the text flow.
lineSpacing: This property is of double type and it is used to define the space
between the text objects. You can set this property using the method named
setLineSpacing().
textAlignment: this property represents the alignment of the text objects in the
pane. You can set value to this property using the method setTextAlignment().
To this method you can pass four values: CENTER, JUSTIFY, LEFT, RIGHT.
Example
The following program is an example of the text flow layout. In this, we are creating three
text objects with font 15 and with various colors. We are then adding them to a Text flow
pane with an alignment value Justify, while the line spacing is 15.
import javafx.application.Application;
import javafx.collections.ObservableList;
467
JavaFX
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.scene.text.TextAlignment;
import javafx.scene.text.TextFlow;
import javafx.stage.Stage;
@Override
public void start(Stage stage) {
text1.setFill(Color.DARKSLATEBLUE);
Text text2 = new Text("We provide free tutorials for readers in various
technologies ");
//Setting font to the text
text2.setFont(new Font(15));
//Setting color to the text
text2.setFill(Color.DARKGOLDENROD);
Text text3 = new Text("\n Recently we started free video tutorials too
");
//Setting font to the text
text3.setFont(new Font(15));
//Setting color to the text
text3.setFill(Color.DARKGRAY);
text4.setFont(new Font(15));
text4.setFill(Color.MEDIUMVIOLETRED);
469
JavaFX
}
}
Compile and execute the saved java file from the command prompt using the following
commands.
javac TextFlowExample.java
java TextFlowExample
TilePane
If we use this pane in our application, all the nodes added to it are arranged in the form
of uniformly sized tiles. The class named tileFlow of the package javafx.scene.layout
represents the TilePane flow.
alignment: This property represents the alignment of the pane and you can set
the value of this property using the setAlignment() method.
hgap: This property is of the type double and it represents the horizontal gap
between each tile in a row.
vgap: This property is of the type double and it represents the vertical gap between
each tile in a row.
470
JavaFX
prefRows: This property is of double type and it represents the preferred number
of rows for a vertical tile pane.
tileHeight: This property is of double type and it represents the actual height of
each tile.
tileWidth: This property is of double type and it represents the actual width of
each tile.
Example
The following program is an example of the tile pane layout. In this, we are creating a tile
pane which holds 7 buttons.
import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.geometry.Orientation;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.TilePane;
import javafx.stage.Stage;
@Override
public void start(Stage stage) {
471
JavaFX
new Button("MonDay"),
new Button("TuesDay"),
new Button("WednesDay"),
new Button("ThursDay"),
new Button("FriDay"),
new Button("SaturDay")
};
472
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac TilePaneExample.java
java TilePaneExample
GridPane
If we use Grid Pane in our application, all the nodes that are added to it are arranged in a
way that they form a grid of rows and columns. This layout comes handy while creating
forms using JavaFX.
The class named GridPane of the package javafx.scene.layout represents the GridPane.
This class provides eleven properties, which are
alignment: This property represents the alignment of the pane and you can set
value of this property using the setAlignment() method.
hgap: This property is of the type double and it represents the horizontal gap
between columns.
vgap: This property is of the type double and it represents the vertical gap between
rows.
gridLinesVisible: This property is of Boolean type. On true, the lines of the pane
are set to be visible.
473
JavaFX
Example
The following program is an example of the grid pane layout. In this, we are creating a
form using a Grid Pane.
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Text;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
public class GridPaneExample extends Application {
@Override
public void start(Stage stage) {
//Creating Buttons
Button button1 = new Button("Submit");
Button button2 = new Button("Clear");
474
JavaFX
gridPane.setMinSize(400, 200);
475
JavaFX
}
}
Compile and execute the saved java file from the command prompt using the following
commands.
javac GridPaneExample.java
java GridPaneExample
476
17. JavaFX CSS JavaFX
Cascading Style Sheets, also referred to as CSS, is a simple design language intended
to simplify the process of making web pages presentable.
CSS handles the look and feel part of a web page. Using CSS, you can control the color of
the text, style of fonts, spacing between paragraphs, size of columns and layout. Apart
from these, you can also control the background images or colors that are used, layout
designs, variations in display for different devices and screen sizes as well as a variety of
other effects.
CSS in JavaFX
JavaFX provides you the facility of using CSS to enhance the look and feel of the
application. The package javafx.css contains the classes that are used to apply CSS for
JavaFX applications.
A CSS comprises of style rules that are interpreted by the browser and then applied to the
corresponding elements in your document.
Selector A selector is an HTML tag at which a style will be applied. This could be
any tag like <h1> or <table>, etc.
Property A property is a type of attribute of the HTML tag. In simpler terms, all
the HTML attributes are converted into CSS properties. They could be
color, border, etc.
Value - Values are assigned to properties. For example, a color property can have
value either red or #F1F1F1, etc.
The default style sheet used by JavaFX is modena.css. It is found in the JavaFX runtime
jar.
477
JavaFX
.button {
-fx-background-color: red;
-fx-text-fill: white;
}
Example
Assume that we have developed an JavaFX application which displays a form with a Text
Field, Password Field, Two Buttons. By default, this form looks as shown in the following
screenshot:
The following program is an example which demonstrates how to add styles to the above
application in JavaFX.
478
JavaFX
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;
@Override
public void start(Stage stage) {
//Creating Buttons
Button button1 = new Button("Submit");
Button button2 = new Button("Clear");
//Styling nodes
button1.setStyle("-fx-background-color: darkslateblue; -fx-text-fill:
white;");
button2.setStyle("-fx-background-color: darkslateblue; -fx-text-fill:
white;");
gridPane.setStyle("-fx-background-color: BEIGE;");
480
JavaFX
Compile and execute the saved java file from the command prompt using the following
commands.
javac CssExample.java
java CssExample
481