RFR: 8290040: Provide simplified deterministic way to manage listeners [v6]

John Hendrikx jhendrikx at openjdk.org
Wed Oct 26 07:39:45 UTC 2022


On Tue, 25 Oct 2022 21:50:50 GMT, Nir Lisker <nlisker at openjdk.org> wrote:

>> modules/javafx.graphics/src/main/java/javafx/scene/Node.java line 1415:
>> 
>>> 1413:      *
>>> 1414:      * <p>Note that the {@code Node} does not need to be visible for this property
>>> 1415:      * to be {@code true}.
>> 
>> I think that the definition of "shown" is important enough to make it the main focus of the description with something like:
>> 
>> 
>> Indicates whether or not this {@code Node} is shown. A node is considered shown if it's
>> part of a {@code Window} whose {@link shown #Window::showingProperty} is {@code true}.
>> The {@link visibility #visibleProperty} of the node or its scene do not affect this property.
>> 
>> 
>> I think that there's no need to repeat the showing conditions for a window.
>> Also we need to be careful not to confuse `shown` with `showing`, which are properties on `ComboBox`, `ChoiceBox` and others.
>
> We might also want to add a paragraph explaining its use. Something like:
> 
> This property can be used in conjunction with {@link ObservableValue#when}
> as a source for listeners that should be collected when the node is not shown.
> 
> If there are other uses we can mention them as well.

I've changed the documentation as you suggested, and I also included that the `Node` must be part of a `Scene`, although I suppose that is a given since you can't show a node in a window otherwise.

> Also we need to be careful not to confuse shown with showing, which are properties on ComboBox, ChoiceBox and others.
Definitely, I had `showing` in the initial version only to discover it was already present in common controls.

I also added your suggested paragraph but rephrased as:

> This property can be used in conjunction with {@link ObservableValue#when} to create bindings which are only actively listening to their source when the node is shown.

Other uses could be to disable animations when not shown.  For example, `ProgressBarSkin` and some other controls only animate their controls when visible (they however do a visibility check as well).  See `isTreeShowing`.  

For example, I've used this property to start animations as soon as a `Node` becomes shown, and to stop the animation when it is no longer shown.  I've added this to the docs:

> This property can also be used to start animations when the node is shown, and to stop them when it is no longer shown.

I also added a `@see ObservableValue#when(ObservableValue)` -- not sure if that is needed.

-------------

PR: https://git.openjdk.org/jfx/pull/830


More information about the openjfx-dev mailing list