Skip to content
/ aboutfx Public

An unofficial GitHub repo that sums up everything about the JavaFX project state on a single page

License

Notifications You must be signed in to change notification settings

mkpaz/aboutfx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AboutFX

An unofficial GitHub repo that sums up everything about the JavaFX project state on a single page.

About the Project

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).

GitHub

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.

no-image

Docs and Tutorials

Official docs:

Tutorials for beginners:

Community

Twitter Mastodon reddit

  • 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

Libraries

Project Tags Description
Animated
stars
#graphics Implicit animations for JavaFX inspired by Flutter
AnimateFX
stars
#graphics 70+ ready-to-use animations
AtlantaFX
stars
#controls, #theme Modern CSS theme collection with additional controls
CalendarFX
stars
#controls A calendar framework containing a set of professional controls to implement a calendar UI
ChartFx
stars
#charts A scientific charting library with focus on performance for data sets with up to millions of data point
ControlsFX
stars
#controls, #layout High quality UI controls to complement the core JavaFX distribution
DesktopPaneFX
stars
#controls, #graphics JavaFX version of Swing’s JDesktopPane which can be used as a container for individual "child" similar to JInternalFrame
EasyBind
stars
#base Custom JavaFX bindings made easy with lambdas
Flowless
stars
#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
stars
#framework A framework for easily creating forms
FroXty
stars
#graphics A library which replicates the famous iOS translucent effect with ease
FXFileChooser
stars
#controls An alternative file chooser for extreme large directories that allows quick manual filtering
FXForm2
stars
#framework A library providing automatic form generation
FXGL
stars
#framework, #games Game development engine (framework)
FXGraphics2D
stars
#graphics A JavaFX library that allows Java2D code (Graphics2D) to be used to draw to a Canvas node
FXParallax
stars
#controls, #graphics A controls for adding parallax effects
FXRibbon
stars
#controls Microsoft-like ribbon control
FXTaskbarProgressBar
stars
#graphics, #system A library for showing progress on the Windows taskbar
FXTrayIcon
stars
#graphics, system System tray icon implementation that allows developers to use native JavaFX MenuItem and not have to worry with AWT or Swing
FXyz
stars
#graphics 3D Visualization and Component Library
GemsFX
stars
#controls, #layout A collection of JavaFX controls and utilities
GestureFX
stars
#controls, #graphics A lightweight pinch-to-zoom pane
Gluon Maps
stars
#controls A library that integrates OpenStreetMaps into a Java application
Gluon Rich Text Area
stars
#controls RichTextArea control created with Java and JavaFX standard APIs
Graph Editor
stars
#diagrams, #framework A library for creating and editing graph-like diagrams
Griffon
stars
#framework Desktop application development platform that leverages concepts like Convention over Configuration, modularity, and freedom of choice
Ikonli
stars
#graphics Icon packs for Java applications
JCSG
stars
#graphics Java implementation of BSP based CSG (Constructive Solid Geometry)
JFXtras
stars
#controls, #layout A supporting library containing helper classes, extended layouts and controls
JMetro
stars
#controls, #theme A modern theme inspired by Microsoft Metro
JSilhouette
stars
#graphics Additional shapes for Java applications
MaterialFX
stars
#controls Material design components
Medusa
stars
#controls, #charts A library for gauges
MigPane
stars
#layout Versatile layout manager
mvvmFX
stars
#framework An application framework which provides necessary components to implement the MVVM pattern
OpenGLFX
stars
#graphics OpenGL implementation for JavaFX
Open Lowcode
stars
#framework A solution for rapid development of specific enterprise software
Orson Charts
stars
#charts An interactive 3D chart library
PreferencesFX
stars
#framework A library to easily create a UI for application settings / preferences
ReactiveDeskFX
stars
#framework A micro-framework to develop JavaFX components very fast and with minimal code following MVVM architecture pattern with passive view
RichTextFX
stars
#controls A memory-efficient text area that allows to style ranges of text and display custom objects in-line
TestFX
stars
#unit-tests Simple and clean testing for JavaFX
TilesFX
stars
#controls, #charts A library containing tiles that can be used for dashboards
TiwulFX Dock
stars
#controls Enhanced TabPane that supports tab reordering, detaching and docking
UndoFX
stars
#base A general-purpose undo manager
ValidatorFX
stars
#framework A form validation library
VWorkflows
stars
#diagrams Interactive flow/graph visualization for building domain specific visual programming environments
WorkbenchFX
stars
#framework A lightweight RCP framework

Tools

Project Tags Description
Component-Inspector
stars
#dev-tools A tool to help to inspect the location and properties of a component in a window hierarchy
Conveyor
stars
#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
stars
#dev-tools A tool that provides CSS reloading functionality in a running application (hot reload)
FXLauncher
stars
#deployment Auto-updating launcher for JavaFX applications
Getdown
stars
#deployment A system for deploying Java applications to end-user computers, as well as keeping those applications up to date
Gluon Scene Builder
stars
#dev-tools A drag and drop UI designer tool allowing rapid desktop and mobile app development
JavaFX Gradle Plugin
stars
#build, #gradle Simplifies working with JavaFX 11+ for gradle projects
JavaFX Maven Plugin
stars
#build, #maven Maven plugin to run JavaFX 11+ applications
Maven JPackage Template
stars
#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
stars
#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
stars
#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
stars
#deployment Auto-updater and launcher built with Java 9 module system in mind.
WebFX
stars
#transpiler Write your Web Application in JavaFX and WebFX will transpile it in pure JS

Other Languages

Pulse

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.

Git

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.

no-image

Not very useful, but nonetheless below graphs can give an idea about the project complexity.

no-image no-image

Github

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.

no-image no-image

The number of created JavaFX projects is vague, but still interesting metric. As you can see it's almost stable.

no-image

Bug Tracker

JavaFX uses OpenJDK bug tracker, namely Java Bug System. Let's check some summary for starters.

no-image

Now that's more interesting, the number of resolved issues by version. Unsurprisingly, LTS versions in leaders because they're still receiving a backports.

no-image

Also, as expected most of the issues are addressed to the javafx-controls module.

no-image

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.

no-image

Mailing List

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.

no-image

2022

OpenJFX 18 (March) and OpenJFX 19 (September) released.

And just some stats to show that the project development is still quite active.

no-image

no-image

no-image

Latest Features

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"));

Upcoming

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.

Drafts

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;
}

FAQ

How to start a new project?

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.

How to report an issue?

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.

Where can I find help?

Does JavaFX provide LTS versions?

Yes. Gluon, which is one of the largest OpenJFX contributors, provides LTS builds for free, but there's also extended commercial support.

What types of applications can I create with JavaFX?

Almost everything. Complex desktop apps, multimedia, games, mobile and Web too.

JavaFX is not a part of JDK anymore. Does it mean the project is abandoned?

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.

About

An unofficial GitHub repo that sums up everything about the JavaFX project state on a single page

Topics

Resources

License

Stars

Watchers

Forks