RFR: 8087555: [ChoiceBox] uncontained value not shown

Jeanette Winzenburg fastegal at openjdk.java.net
Fri Apr 24 15:10:10 UTC 2020

On Fri, 24 Apr 2020 14:05:27 GMT, Ambarish Rapte <arapte at openjdk.org> wrote:

> I have not reviewed the code but have only tested it.

Thanks for taking an initial look :) Just keep in mind that this issue is focused on displaying of the box' value

> The value of index is not defined when an uncontained item is selected.

yeah the spec is rather .. well, suboptimal at some crucial points (see also
[JDK-8088012](https://bugs.openjdk.java.net/browse/JDK-8088012)). To keep the state logically consistent, we need an
invariant like:

     assertEquals(getItems().indexOf(selectedItem), selectedIndex)

Which seems to be hinted at in a code comment in `SingleSelectionModel.select(item)`:

        // if we are here, we did not find the item in the entire data model.
        // Even still, we allow for this item to be set to the give object.
        // We expect that in concrete subclasses of this class we observe the
        // data model such that we check to see if the given item exists in it,
        // whilst SelectedIndex == -1 && SelectedItem != null.

For ChoiceBox, that will be fixed in [JDK-8241999](https://bugs.openjdk.java.net/browse/JDK-8241999) (ready for push as
soon as this is integrated).

> With the current implementation (with and without this PR change) there is a difference of behavior when an uncontained
> item is selected Vs when an existing item is selected, in scenarios as below,
> => clearSelection()
> a) scenario 1
>     1. Select/set an uncontained item. `selectedIndex` would be -1.
>     2. call `clearSelection()`, Does NOT clear the selected item to null

true, that's spec'ed in ComboBox only .. so by analogy I considered it being the same here. Hmm .. might need an update
of the doc?

>        b) scenario 2
>     3. Select an item at index 2, `selectedIndex` would be 2.
>     4. Select/set an uncontained item. `selectedIndex` would remain 2.

exactly that is [JDK-8241999](https://bugs.openjdk.java.net/browse/JDK-8241999)

>     5. call `clearSelection()`, => clears the selected item to null  and selected index to -1

interesting, hadn't noticed yet - will add a test to the other fix, thanks :)

> and similarly the difference of behavior can be observed with `selectNext()`, `selectPrevious()`

yeah, that's another issue .. selection issues are a bottomless pit ..

> This is not formally documented(nor decided), so we might need to decide on a value of index for an uncontained value.

see the "natural" constraint above - without we get into hell, IMO.

Good points all, thanks again!


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

More information about the openjfx-dev mailing list