I missed this question.

There are several external libaries available to help with these kinds of bindings. There is EasyBind, ReactFX and an attempt of my own (https://github.com/hjohn/hs.jfx.eventstream).

They all have a different way of addressing this, but they do all have one thing in common: they all require that you wrap ObservableValues in their own extended variant of ObservableValue. EasyBind has "MonadicObervableValue", ReactFX has "Val" and "Var" and my own attempt has "ValueStream".

Effectively this means you will get two types of properties in your JavaFX application, and you'll need to update standard properties like ObjectProperty to the type the framework provides to get the extra features. Interop between "old" and "new" code requires wrapping and sometimes unwrapping.

Integrating this into JavaFX's ObservableValue directly avoids all these wrappers and all the extra work that entails for the user of fluent bindings.

With this base in place, external libraries can provide streams and complicated mapping functions (ReactFX especially has an overabundance of features, most of which too niche to include into JavaFX directly).

That's not the only advantage however. When these are integrated, JavaFX internals can take advantage of them as well. Managing of cascading properties (usually done manually in JavaFX code, Bindings#select is not usually used) will be much cleaner and simpler.

Also the lazy bindings part of this MR can be used to avoid creating listeners for properties that aren't used themselves -- this allows for example Node to provide convience properties (like tree visibility) without having to pre-emptively add listeners. This is not possible currently without consuming additional memory for every Node instance.

Finally, it also would serve as a type safe replacement for Bindings#select which is something that I think the team behind FX has been wanting to address for quite a while now.

--John

On 12/09/2021 01:38, Tom Schindl wrote:
I have not looked at the code yet but why does this have to be part of
OpenJFX and can not be implemented as an external library?

Tom

Am 05.08.21 um 00:25 schrieb John Hendrikx:
Perhaps:

Fluent bindings for ObservableValue
https://github.com/openjdk/jfx/pull/434

It was received well I think, and there was some interest from Nir
Lisker to work on a proposal.

--John

On 30/07/2021 14:56, Kevin Rushforth wrote:
Now that JavaFX 17 is in RDP2, we can turn more attention to bug fixes
and enhancement requests for JavaFX 18. It's the summer, so there may be
delays as some people are out at various times (including me), but I
would like to get some of the outstanding enhancement requests moving
over the next few weeks.

Specifically, I'd like to see the following proceed:

* Transparent backgrounds in WebView
JBS: https://bugs.openjdk.java.net/browse/JDK-8090547
PR: https://github.com/openjdk/jfx/pull/563

* Add DirectionalLight
JBS: https://bugs.openjdk.java.net/browse/JDK-8234921
PR: https://github.com/openjdk/jfx/pull/548

* CSS pseudoclasses :focus-visible and :focus-within
https://bugs.openjdk.java.net/browse/JDK-8268225
PR: https://github.com/openjdk/jfx/pull/475

* Improve property system to facilitate correct usage (minus the binary
incompatible API change)
JBS: https://bugs.openjdk.java.net/browse/JDK-8268642
PR: https://github.com/openjdk/jfx/pull/590 (Draft)

And maybe the following:

* Add CSS themes as a first-class concept (need a consensus on how to
proceed)

* Undecorated interactive stage style (still in early discussion, but
the concept looks interesting and useful)

There are probably others I'm forgetting.

Each of the above should be discussed in their own thread on openjfx-dev
rather than a reply to this thread.

-- Kevin



Reply via email to