JavaFX is a Java library used to build Rich Internet Applications. The applications written using JavaFX can run seamlessly across multiple platforms. The applications developed using this library can run on various devices such as Desktop Computers, Mobile Phones, TVs, Tablets, etc.

As stated by Oracle, JavaFX is the next step in their Java based rich client strategy.

JavaFX has introduced several improvements over Swing, such as the possibility to markup UIs with FXML, and theming with CSS. It has great potential for writing modular, clean, and maintainable code.

The World is a Stage

In Swing, a class that holds the user interface components is called a frame and is defined by the JFrame class. A frame is mainly an empty window in which we can add a panel, which serves as a container for other user-interface elements like input fields, checkboxes etc. A Swing application is actually a class that extends the JFrame class. To display user-interface components, we add components to a JPanel and then add the panel to the frame.

JavaFX uses the plot of a theater to model the top-level containers in an application. A stage (defined by the Stage class) represents the highest level container—typically, a window. The specific components that make up the UI are contained in a scene (defined by the Scene class). An application can have more than one scene, but only one of the scenes can be shown on the stage at a time.

A scene consists of a scene graph, which is the most important concept in JavaFX. The scene graph is a collection of all the elements that make up a user interface—layouts, groups, controls, and shapes. These objects are called nodes and are all derived from the Node class. The Node class has many useful features and capabilities that are automatically made available to any object you can add to your user interface. For example, the Node class defines a setRotate method that allows you to rotate any node in the scene graph.

CSS Support

One of the best features of JavaFX is that we can control formatting with Cascading Style Sheets (CSS).

Just about every aspect of the appearance of the user interface can be set by a style rule, and we can easily allow the user to select which of several available style sheets to apply to the scene. Thus, we can change the entire appearance of the application with a single method call and apply themes to the app as an extended feature.

Animation Support

Animation was also possible in Swing, but Swing does not provide any forward support for it. To animate a Swing component, we must set up our own timers and build our own logic to perform the animation.

In contrast, JavaFX has built-in support for sophisticated animations that can be applied to any node in the scene graph. We can use one of several built-in transition classes to perform common animations such as fades, rotations, or motion paths. Or, we can use the KeyFrame and Timeline classes to easily set up custom animations.

History of JavaFX

JavaFX was originally developed by Chris Oliver when he was working for a company called“See Beyond Technology Corporation”, which was later acquired by Sun Microsystems in the year 2005.

The following points give us more insight into this library

Initially the project was named as F3 (Form Follows Functions) and it was developed with the intention to provide rich and sleek interfaces for developing GUI Applications.

Sun Microsystems acquired the See Beyond company in June 2005, it adopted 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, NetBeans integrated with JavaFX was available. In the same year, the Java Standard Development Kit for JavaFX 1.0 was released.

In the year 2009, the 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 the 18th of March, 2014.

Features of JavaFX

Now, let us list some key features of the JavaFX library

Written in Java − The JavaFX library is written in Java and is available for all the languages that can be executed on a JVM, which include − Java, Groovy and JRuby.

Platform Independent - JavaFX applications are platform independent.

FXML − JavaFX features a language called FXML, which is a declarative markup language. The only purpose of this language is to define the UI.

Scene Builder − JavaFX provides an application named Scene Builder. On integrating this application in IDE’s such as Eclipse and NetBeans, the users can access a drag and drop design interface, which is used to develop FXML applications.

Swing Interoperability − In a JavaFX application, we can embed Swing content using the Swing Node class. Similarly, we can update the existing Swing applications with JavaFX features like embedded web content and rich graphics media.

Built-in UI controls − the JavaFX library caters UI controls which we can use to develop a full-featured application.

CSS like Styling − JavaFX provides CSS like styling. By using this, you can improve the design of your application with a basic 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, which we can use to draw directly within an area of the JavaFX scene. JavaFX also provides classes for Printing purposes in the package javafx.print.

Rich set of API’s − JavaFX library provides a rich set of API’s to develop GUI applications, 2D and 3D graphics, etc. This set of API’s also includes capabilities of the 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.

Integrated Graphics library − JavaFX provides classes for 2d and 3d graphics.

Graphics pipeline − JavaFX supports graphics based on the hardware-accelerated graphics pipeline known as Prism . When used with a supported a Graphics Card or GPU it offers smooth graphics. In case the system does not support graphics cards then prism defaults to the software rendering stack.

That concludes our introduction to JavaFX. Check back for the next JavaFX article where we’ll be seeing how it stacks up against HTML5 and deciding when to use which technology.