RFR: 8263807: Button types of a DialogPane are set twice, returns a wrong button

Kevin Rushforth kcr at openjdk.java.net
Mon Apr 5 23:04:10 UTC 2021


On Thu, 18 Mar 2021 14:38:18 GMT, Marius Hanl <github.com+66004280+Maran23 at openjdk.org> wrote:

> When DialogPane#getButtonTypes().setAll() is called twice with the same argument(s), DialogPane#lookupButton does not return the node which is shown inside the button bar.
> This is due DialogPane adding two list change listeners to 'buttons' (#getButtonTypes). They have the wrong order, which will result in the button bar not changing at all and the 'buttonNodes' list will recreate the dialog button(s).
> Finally, this will make DialogPane#lookupButton returning the 'wrong' button, which is in fact not used inside the dialog button bar.

I have one question on the fix (see below). Also, have you run all of the unit tests (not just the new one)?

modules/javafx.controls/src/main/java/javafx/scene/control/DialogPane.java line 1062:

> 1060:         boolean hasDefault = false;
> 1061:         for (ButtonType cmd : getButtonTypes()) {
> 1062:             Node button = buttonNodes.get(cmd);

Why was this change needed?

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

PR: https://git.openjdk.java.net/jfx/pull/432


More information about the openjfx-dev mailing list