RFR: 8237602: TabPane doesn't respect order of TabPane.getTabs() list

Ambarish Rapte arapte at openjdk.java.net
Fri May 1 15:24:51 UTC 2020


On Fri, 1 May 2020 14:39:30 GMT, Kevin Rushforth <kcr at openjdk.org> wrote:

>> Issue:
>> When tabs are permuted as mentioned in the issue description as,
>> 1. TabPane.getTabs().setAll(tab0, tab1)
>> 2. TabPane.getTabs().setAll(tab0, tab1, tab2, tab3);
>> the tab headers do not get permuted in same order as `TabPane.getTabs()`.
>> 
>> => tab headers should be shown in order as  tab0, tab1, tab2, tab3.
>> => but are show in order as  tab2, tab3, tab0, tab1
>> 
>> Cause:
>> Newly added tabs(tab2, tab3) are not inserted at correct index. The index `Change.getFrom()` (0) used from Change does
>> not remain valid after the tabs to be moved(tab0, tab1) are removed from `tabsToAdd` list.
>> Fix:
>> Use the index of first newly added tab, from `TabPane.getTabs()`, which would be always reliable.
>> 
>> Verification:
>> No existing tests fail due to this change.
>> Added a system test which fails without and pass with fix.
>
> modules/javafx.controls/src/main/java/javafx/scene/control/skin/TabPaneSkin.java line 994:
> 
>> 993:         private void moveTab(int moveToIndex, TabHeaderSkin tabHeaderSkin) {
>> 994:             if (moveToIndex != headersRegion.getChildren().indexOf(tabHeaderSkin)) {
>> 995:                 headersRegion.getChildren().remove(tabHeaderSkin);
> 
> Unless I am missing something, this check seems unrelated to the bug.

Yes Kevin, this is not required for fix. In some scenarios the tabHeader gets placed at correct index due to the
addition of new headers, so this movement becomes redundant.

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

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


More information about the openjfx-dev mailing list