An unofficial GitHub repo that sums up everything about the JavaFX project state on a single page.
- 🏠About the Project
- đź“š Docs and Tutorials
- 🧑‍🤝‍🧑 Community
- đź“Š Pulse
- âť“ FAQ
OpenJFX is an open source, next generation client application platform for desktop and embedded systems for use with the JDK. It is a collaborative effort by many individuals and companies with the goal of producing a modern, efficient, and fully featured toolkit for developing rich client applications (source).
- Official Website - the project starting page
- Project Wiki - the project home under umbrella of the OpenJDK
- Census - the list of maintainers
JavaFX follows the same semi-annual release cadence as OpenJDK. A new JavaFX version is being released every March and September. There're also Early Access builds, that are published every 2-3 weeks.
Official docs:
Tutorials for beginners:
- JFX Central - one-stop destination for anything related to the JavaFX ecosystem: latest news, a list of people that develop libraries, write books, give presentations
- FooJay - a place for friends of OpenJDK
Project | Tags | Description |
---|---|---|
Animated |
#graphics |
Implicit animations for JavaFX inspired by Flutter |
AnimateFX |
#graphics |
70+ ready-to-use animations |
AtlantaFX |
#controls , #theme |
Modern CSS theme collection with additional controls |
CalendarFX |
#controls |
A calendar framework containing a set of professional controls to implement a calendar UI |
ChartFx |
#charts |
A scientific charting library with focus on performance for data sets with up to millions of data point |
ControlsFX |
#controls , #layout |
High quality UI controls to complement the core JavaFX distribution |
DesktopPaneFX |
#controls , #graphics |
JavaFX version of Swing’s JDesktopPane which can be used as a container for individual "child" similar to JInternalFrame |
EasyBind |
#base |
Custom JavaFX bindings made easy with lambdas |
Flowless |
#controls |
Efficient VirtualFlow which is a layout container that lays out cells in a vertical or horizontal flow, so you may have a list of thousands of items, but only, say, 30 cells are rendered at any given time |
FormsFX |
#framework |
A framework for easily creating forms |
FroXty |
#graphics |
A library which replicates the famous iOS translucent effect with ease |
FXFileChooser |
#controls |
An alternative file chooser for extreme large directories that allows quick manual filtering |
FXForm2 |
#framework |
A library providing automatic form generation |
FXGL |
#framework , #games |
Game development engine (framework) |
FXGraphics2D |
#graphics |
A JavaFX library that allows Java2D code (Graphics2D) to be used to draw to a Canvas node |
FXParallax |
#controls , #graphics |
A controls for adding parallax effects |
FXRibbon |
#controls |
Microsoft-like ribbon control |
FXTaskbarProgressBar |
#graphics , #system |
A library for showing progress on the Windows taskbar |
FXTrayIcon |
#graphics , system |
System tray icon implementation that allows developers to use native JavaFX MenuItem and not have to worry with AWT or Swing |
FXyz |
#graphics |
3D Visualization and Component Library |
GemsFX |
#controls , #layout |
A collection of JavaFX controls and utilities |
GestureFX |
#controls , #graphics |
A lightweight pinch-to-zoom pane |
Gluon Maps |
#controls |
A library that integrates OpenStreetMaps into a Java application |
Gluon Rich Text Area |
#controls |
RichTextArea control created with Java and JavaFX standard APIs |
Graph Editor |
#diagrams , #framework |
A library for creating and editing graph-like diagrams |
Griffon |
#framework |
Desktop application development platform that leverages concepts like Convention over Configuration, modularity, and freedom of choice |
Ikonli |
#graphics |
Icon packs for Java applications |
JCSG |
#graphics |
Java implementation of BSP based CSG (Constructive Solid Geometry) |
JFXtras |
#controls , #layout |
A supporting library containing helper classes, extended layouts and controls |
JMetro |
#controls , #theme |
A modern theme inspired by Microsoft Metro |
JSilhouette |
#graphics |
Additional shapes for Java applications |
MaterialFX |
#controls |
Material design components |
Medusa |
#controls , #charts |
A library for gauges |
MigPane |
#layout |
Versatile layout manager |
mvvmFX |
#framework |
An application framework which provides necessary components to implement the MVVM pattern |
OpenGLFX |
#graphics |
OpenGL implementation for JavaFX |
Open Lowcode |
#framework |
A solution for rapid development of specific enterprise software |
Orson Charts |
#charts |
An interactive 3D chart library |
PreferencesFX |
#framework |
A library to easily create a UI for application settings / preferences |
ReactiveDeskFX |
#framework |
A micro-framework to develop JavaFX components very fast and with minimal code following MVVM architecture pattern with passive view |
RichTextFX |
#controls |
A memory-efficient text area that allows to style ranges of text and display custom objects in-line |
TestFX |
#unit-tests |
Simple and clean testing for JavaFX |
TilesFX |
#controls , #charts |
A library containing tiles that can be used for dashboards |
TiwulFX Dock |
#controls |
Enhanced TabPane that supports tab reordering, detaching and docking |
UndoFX |
#base |
A general-purpose undo manager |
ValidatorFX |
#framework |
A form validation library |
VWorkflows |
#diagrams |
Interactive flow/graph visualization for building domain specific visual programming environments |
WorkbenchFX |
#framework |
A lightweight RCP framework |
Project | Tags | Description |
---|---|---|
Component-Inspector |
#dev-tools |
A tool to help to inspect the location and properties of a component in a window hierarchy |
Conveyor |
#deployment |
A tool that generates self-upgrading packages for Windows, macOS and Linux using each platform's native package formats without requiring you to have those operating systems |
CssFX |
#dev-tools |
A tool that provides CSS reloading functionality in a running application (hot reload) |
FXLauncher |
#deployment |
Auto-updating launcher for JavaFX applications |
Getdown |
#deployment |
A system for deploying Java applications to end-user computers, as well as keeping those applications up to date |
Gluon Scene Builder |
#dev-tools |
A drag and drop UI designer tool allowing rapid desktop and mobile app development |
JavaFX Gradle Plugin |
#build , #gradle |
Simplifies working with JavaFX 11+ for gradle projects |
JavaFX Maven Plugin |
#build , #maven |
Maven plugin to run JavaFX 11+ applications |
Maven JPackage Template |
#build , #template |
A sample project illustrating building nice, small cross-platform JavaFX or Swing desktop apps with native installers with GitHub Actions included |
SASS CLI Maven Plugin |
#build , #maven |
A thin wrapper around the SASS command line interface for generating CSS files, so you can use CSS preprocessor to create your stylesheets with comfort |
Scenic View |
#dev-tools |
An application designed to make it simple to understand the current state of application scene-graph, and to also easily manipulate properties of the scene-graph without having to keep editing the code |
Update4j |
#deployment |
Auto-updater and launcher built with Java 9 module system in mind. |
WebFX |
#transpiler |
Write your Web Application in JavaFX and WebFX will transpile it in pure JS |
JavaFX has a long history. The project started at 2009 and was a part of Oracle JDK until 2018. With the release of OpenJDK 11, Oracle made JavaFX part of the OpenJDK under the OpenJFX project, in order to increase the pace of its development. From the following charts you can form an opinion whether it's worked or not.
The number of committers no changed much since the JavaFX8 release in 2014, and the number of commits is more or less stable since the initial development stage is finished.
Not very useful, but nonetheless below graphs can give an idea about the project complexity.
OpenJFX was officially published on Github in 2019 as a part of Project Scara (JEP 369) and there was Gluon's javafxports initiative prior to that.
So, we can investigate how the project popularity on GitHub increased since then.
The number of created JavaFX projects is vague, but still interesting metric. As you can see it's almost stable.
JavaFX uses OpenJDK bug tracker, namely Java Bug System. Let's check some summary for starters.
Now that's more interesting, the number of resolved issues by version. Unsurprisingly, LTS versions in leaders because they're still receiving a backports.
Also, as expected most of the issues are addressed to the javafx-controls
module.
And finally to answer a question how old most of the issues are. Note that most of them isn't critical. It can be a small enhancements, like providing more reliable tests here and there, but since JBS is locked to committers only, so regular users can't vote, there won't be more detailed stats.
The stats from the OpenJFX Dev mailing list. There's also OpenJFX Discuss mailing list, but it's long dead, because people mostly prefer StackOverflow or Reddit these days.
As you can see, mailing list activity increased three times after the OpenJFX was published on GitHub.
OpenJFX 18 (March) and OpenJFX 19 (September) released.
And just some stats to show that the project development is still quite active.
This is an excerpt of the most interesting recent features from the JavaFX release notes and the list of pull requests.
Adds support for the data-URI scheme to load stylesheets embedded in code or FXML files. This can be useful for small applications that would otherwise need to deploy their stylesheets alongside the application. It can also be useful to dynamically generate and add stylesheets to applications without deploying temporary files on disk. Usage example:
node.getStylesheets().add("data:base64," + new String(Base64.getEncoder().encode(YOUR_CSS.getBytes()), UTF_8));
Adds support for loading images from inline data URIs, which is also widely supported by web browsers. This enables developers to package small images directly in CSS files, rather than separately deploying the images alongside the CSS file. Usage example:
.foo {
-fx-background-image: url("data:image/png;base64,BASE64_STRING");
}
Being able to read the lock state would allow an application to inform the user that caps lock was enabled for passwords or other usages where the keyboard input might not be echoed. It would also allow an application to do spell checking / auto-correction that might ordinarily be skipped when typing all upper-case letters. Usage example: simply check the new Platform#isKeyLocked(KeyCode)
method.
A common design pattern is to not only make objects invisible, but also let other components use the freed space. With JavaFX this can be achieved by modifying CSS using node { visible: false; -fx-min-width: 0; -fx-pref-width: 0; }
. From now on, it can be done simpler by node { visible: false; -fx-managed: false; }
.
Allows a WebView
to be created with a transparent background, so that HTML content can be rendered over something else.
The W3C CSS Selectors Level 4 specification defines three focus-related pseudo-classes: "focus", which applies to a node that currently accepts keyboard or mouse input; "focus-visible", which applies to a focused node that visibly indicates focus, and "focus-within", which applies to a focused node and any of its parents. Check MDN examples to understand how it works.
Adds support for creating derived bindings directly from ObservableValue with new API in the ObservableValue interface. Check PR for more examples.
// Standard JavaFX:
label.textProperty().bind(text.length().negate().add(100).asString().concat(" characters left"));
// Fluent: more compact and more clear
label.textProperty().bind(text.orElse("").map(v -> 100 - v.length() + " characters left"));
Simplified deterministic way to manage listeners (integrated)
Adds a new property on Node
which provides a boolean which indicates whether or not the Node
is currently a part of a Scene
. It also adds a new fluent binding method when()
on ObservableValue
. Now it becomes easier to break strong references that prevent garbage collection between a long lived property and one that should be shorter lived.
// the label is eligible for GC immediately after it stops showing as the listener
// on longLivedProperty is removed when the provided condition is false
label.textProperty().bind(longLivedProperty.when(label::isShowingProperty))
The new theming API in javafx.graphics
that provides a basic framework to support application-wide style themes. Usage example:
Application.setStyleTheme(() -> List.of("stylesheet1.css", "stylesheet2.css");
// or
Application.setStyleTheme(new ModenaTheme() {{
addFirst("stylesheet1.css");
addLast("stylesheet2.css");
}});
Replaces old column resize algorithm with a different one, which not only honors all the constraints when resizing, but also provides 4 different resize modes similar to JTable: AUTO_RESIZE_NEXT_COLUMN
,AUTO_RESIZE_SUBSEQUENT_COLUMNS
, AUTO_RESIZE_LAST_COLUMN
, AUTO_RESIZE_ALL_COLUMNS
.
Making undecorated windows resizable is very painful. There're number of implementations but none of them work well. The PR introduces StageStyle.UNDECORATED_INTERACTIVE
which is similar to StageStyle.UNDECORATED
, but adds platform-specific interactions to the window. For all platforms, this includes move and resize behaviors. On Windows, it also includes Aero behaviors (snap to screen edges, dock at top to maximize etc).
Introduces CSS transitions, which specify how a property changes its value smoothly from one value to another.
.button {
-fx-background-color: dodgerblue;
}
.button:hover {
-fx-background-color: red;
-fx-scale-x: 1.1;
-fx-scale-y: 1.1;
transition: -fx-background-color 0.5s ease,
-fx-scale-x 0.5s ease,
-fx-scale-y 0.5s ease;
}
There are detailed instructions on the OpenJFX website and also a convenient Gluon Start project generator. If you're in Maven, check Maven JPackage Template, which gives you ready-to-use GitHub project.
JavaFX uses OpenJDK JIRA bug tracker, so you have to report issues there. Sadly, Java Bug System is read-only for ordinary users, so you won't be able neither to participate in discussion nor to provide additional info after reporting.
- StackOverflow with
javafx
tag. - JavaFX or JavaHelp Reddit communities.
- OpenJFX Dev mailing list for discussions.
Yes. Gluon, which is one of the largest OpenJFX contributors, provides LTS builds for free, but there's also extended commercial support.
Almost everything. Complex desktop apps, multimedia, games, mobile and Web too.
No, it doesn't. Haven't you seen the charts? Critical bugs are fixed very fast and there were a number of good features since JDK 11. JavaFX is a part of OpenJDK project and while some major OpenJDK providers compile JDK with JavaFX included (Azul Zulu, BellSoft Liberica and Oracle since 20EA) it is a part of OpenJDK distribution as well.