I have a soft spot for JavaFX. I've used it for writing my own apps in the past and enjoyed the experience, so it's great to see it getting some big new features after a long period of focus on bug fixing and maturity. The rich text editor and the CSS transitions support should be big upgrades. You could do all the nice transitions you wanted before, but not using CSS syntax. There were also community-developed rich text controls before and it seems like the guy working on this new included control has spent a lot of time talking to those authors to gather requirements and understand where new core APIs were needed first, which is a nice collaboration.
For those who haven't used it JavaFX is a hardware accelerated GUI toolkit primarily targeted at desktop and embedded apps. It's written in Java but via GraalVM can be accessed naturally from other languages like Python, Ruby and Javascript, so when you look at its feature set it's actually arguably the best open source GUI toolkit available for those languages - especially for business apps where widgets like table views, tree views, tab panes, and now rich text controls are all table stakes.
For web developers, it's a mashup of styles and ideas from across the GUI space. It's DOM-like in the sense of rendering an object tree, but every property is reactive (observable/bindable), and there are libraries of operators that let you build functional pipelines of data based on observable values and collections. So you can insert a model object representing some data into an ObservableMap, and the entire GUI will update minimally and incrementally based on that change without any imperative logic. This includes integrating properly with animations. There's no React-style 'rerender' step or DOM diffing that tries to reverse engineer the underlying changes, instead GUI state is connected to app state explicitly via bindings. This gives you a form of reactive UI that still allows for the use of visual design tools (e.g. Scene Builder) whilst keeping the use of XML syntax for defining GUI layouts as React does with JSX.
JavaFX UIs are styled using a cleaned up dialect of CSS that's more focused on the appearance of individual controls than layout. Layout is handled using nested controls rather than styling by packing together a standard set of layout panes. I find FXML + FX CSS a lot more intuitive than web CSS especially for layout, personally.
Then on top of the large set of controls it has support for embedding videos, embedded web views, 3D objects and so on. There's also community projects that add an OpenGL view for direct integration with the rendering pipeline, giving a portable WebGL equivalent.
This can be more efficient as you have access to the full OpenGL API complete with vendor extensions, and without any sandboxing overhead. You can also do things like map parts of the GUI into GL textures and vice-versa, enabling lots of interesting effects.
List of New Features [0]
[0] https://github.com/openjdk/jfx/blob/jfx24/doc-files/release-...
I have a soft spot for JavaFX. I've used it for writing my own apps in the past and enjoyed the experience, so it's great to see it getting some big new features after a long period of focus on bug fixing and maturity. The rich text editor and the CSS transitions support should be big upgrades. You could do all the nice transitions you wanted before, but not using CSS syntax. There were also community-developed rich text controls before and it seems like the guy working on this new included control has spent a lot of time talking to those authors to gather requirements and understand where new core APIs were needed first, which is a nice collaboration.
For those who haven't used it JavaFX is a hardware accelerated GUI toolkit primarily targeted at desktop and embedded apps. It's written in Java but via GraalVM can be accessed naturally from other languages like Python, Ruby and Javascript, so when you look at its feature set it's actually arguably the best open source GUI toolkit available for those languages - especially for business apps where widgets like table views, tree views, tab panes, and now rich text controls are all table stakes.
You can run such apps to the browser using https://jpro.one or ship them as self-updating desktop apps using https://hydraulic.dev/ (disclosure: I make the latter), and the latter can run either on the regular JVM or be compiled to native images in which case they start as fast as a native app would, and use modest amounts of memory (https://bell-sw.com/announcements/2022/08/24/turning-javafx-...).
For web developers, it's a mashup of styles and ideas from across the GUI space. It's DOM-like in the sense of rendering an object tree, but every property is reactive (observable/bindable), and there are libraries of operators that let you build functional pipelines of data based on observable values and collections. So you can insert a model object representing some data into an ObservableMap, and the entire GUI will update minimally and incrementally based on that change without any imperative logic. This includes integrating properly with animations. There's no React-style 'rerender' step or DOM diffing that tries to reverse engineer the underlying changes, instead GUI state is connected to app state explicitly via bindings. This gives you a form of reactive UI that still allows for the use of visual design tools (e.g. Scene Builder) whilst keeping the use of XML syntax for defining GUI layouts as React does with JSX.
JavaFX UIs are styled using a cleaned up dialect of CSS that's more focused on the appearance of individual controls than layout. Layout is handled using nested controls rather than styling by packing together a standard set of layout panes. I find FXML + FX CSS a lot more intuitive than web CSS especially for layout, personally.
Then on top of the large set of controls it has support for embedding videos, embedded web views, 3D objects and so on. There's also community projects that add an OpenGL view for direct integration with the rendering pipeline, giving a portable WebGL equivalent.
https://github.com/husker-dev/openglfx
This can be more efficient as you have access to the full OpenGL API complete with vendor extensions, and without any sandboxing overhead. You can also do things like map parts of the GUI into GL textures and vice-versa, enabling lots of interesting effects.