On Thu, 22 Jan 2026 02:58:06 GMT, Christopher Schnick <[email protected]> wrote:

>> modules/javafx.graphics/src/main/java/javafx/stage/Stage.java line 584:
>> 
>>> 582:      */
>>> 583:     @SuppressWarnings("deprecation")
>>> 584:     public final void initBackdrop(StageBackdrop backdrop) {
>> 
>> This API has the potential to age poorly, as enums are tricky to evolve. For 
>> example, what if a future backdrop type is configurable with a parameter? 
>> This could be improved by having the enum implement a sealed interface, so 
>> we can later add other backdrop types that can't neatly fit into an enum.
>> 
>> I also wonder how graceful degradation works with this API. It might be 
>> useful to be able to model a request like: give me a glass backdrop with a 
>> set of parameters, and if the platform doesn't support that, give me a 
>> `TRANSIENT` backdrop, and if the platform doesn't support that, I just want 
>> an opaque backdrop.
>
> Could perhaps the scene preferences be used for things like this? E.g. 
> similar to having access to the platform styling keys, a user could manually 
> override some of them to achieve the same result as with enums. That would 
> solve any potential parameters and the degradation problem better

I'm not sure about scene preferences, as the supported backdrop materials are 
not exactly a _preference_. It's not something users can change about the 
system.

How about something like this:

public sealed interface StageBackdrop {

    enum Generic implements StageBackdrop {
        DEFAULT,
        WINDOW,
        TABBED,
        TRANSIENT
    }

    record Specialized(String name, Map<String, Object> parameters) implements 
StageBackdrop {
        public Specialized(String name) {
            this(name, Map.of());
        }
    }
}



public class Stage {

    public final void initBackdrop(StageBackdrop... backdrop) {
        ...
    }
}


The `initBackdrop` method would take a list of options in order of preference. 
Maybe I could then configure my backdrop like so:

myStage.initBackdrop(
    // first choice
    new StageBackdrop.Specialized(
        "NSGlassEffect",
        Map.of("style", "NSGlassEffectViewStyleClear")
    ),

    // second choice
    StageBackdrop.Generic.TRANSIENT
);

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

PR Review Comment: https://git.openjdk.org/jfx/pull/2048#discussion_r2715208532

Reply via email to