RFR: 8371859: Dialog unnecessarily invokes DialogPane.requestLayout()

Andy Goryachev angorya at openjdk.org
Thu Nov 13 23:06:33 UTC 2025


On Thu, 13 Nov 2025 21:24:25 GMT, Michael Strauß <mstrauss at openjdk.org> wrote:

> The implementation of `Dialog.dialogPane` adds a `ListChangeListener` to `DialogPane.getButtonTypes()`, and calls `DialogPane.requestLayout()` from the listener.
> 
> This is not needed, because the `DialogPane.createButtonBar()` method already specifies that implementers are required to observe changes of `DialogPane.getButtonTypes()`, and relayout the button bar as needed.
> 
> I've added a test to verify that changing the button types indeed requests a layout on the `DialogPane`.

The fix looks good, but (unrelated) why does this test fails:


    @Test
    public void layoutIsRequestedWhenButtonTypesChange() {
        dialogPane.getButtonTypes().clear();
        dialogPane.layout();
        assertFalse(dialogPane.isNeedsLayout());

        dialogPane.getButtonTypes().add(ButtonType.OK);
        assertTrue(dialogPane.isNeedsLayout());
        
        dialogPane.layout();
        assertFalse(dialogPane.isNeedsLayout()); // fails??
        
        dialogPane.getButtonTypes().setAll(ButtonType.OK);
        assertTrue(dialogPane.isNeedsLayout());
    }

... because it's the case when layout needs multiple pulses to get settled?

This works:


    @Test
    public void layoutIsRequestedWhenButtonTypesChange() {
        dialogPane.getButtonTypes().clear();
        dialogPane.layout();
        assertFalse(dialogPane.isNeedsLayout());

        dialogPane.getButtonTypes().add(ButtonType.OK);
        assertTrue(dialogPane.isNeedsLayout());
        
        dialogPane.layout();
        dialogPane.layout();
        assertFalse(dialogPane.isNeedsLayout()); // passes
        
        dialogPane.getButtonTypes().setAll(ButtonType.OK);
        assertTrue(dialogPane.isNeedsLayout());
    }

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

PR Comment: https://git.openjdk.org/jfx/pull/1973#issuecomment-3530086506
PR Comment: https://git.openjdk.org/jfx/pull/1973#issuecomment-3530094041


More information about the openjfx-dev mailing list