RFR: 8193800: TreeTableView selection changes on sorting

Ambarish Rapte arapte at openjdk.java.net
Tue Jun 2 17:08:20 UTC 2020

In TreeTableView, in case of Multiple selection mode, if nested items are selected, then TreeTableView does not
retain/update the selection correctly when the tree items are permuted(either by `sort()` or by reordering using


1. For permutation, the current implementation uses `TreeModificationEvent` to update the selection.
2. The indices from these TreeModificationEvents are not reliable.
3. It uses the non public `TreeTablePosition` constructor to create intermediate `TreeItem` positions, this constructor
results in another unexpected TreeModificationEvent while one for sorting is already being processed. 4. In case of
sorting, there can be multiple intermediate TreeModificationEvents generated, and for each TreeModificationEvent, the
selection gets updated and results in selection change events being generated. 5. Each time a TreeItem is expanded or
collapsed, the selection must be shifted, but shifting is not necessary in case of permutation. All these issues
combine in wrong update of the selection.


1. On each TreeModificationEvent for permutation, for updating the selection, use index of TreeItem from the
TreeTableView but not from the TreeModificationEvent. 2. Added a new non public TreeTablePosition constructor, which is
almost a copy constructor but accepts a different row. 3. In case of sorting, send out the set of selection change
events only once after the sorting is over. 4. In case of setAll, send out the set of selection change events same as
before.(setAll results in only one TreeModificationEvent, which effectively results in only one set of selection change
events). `shiftSelection()` should not be called in case of permutation i.e. call `if (shift != 0)`

The change is very limited to updating of selection of TreeTableView items when the TreeItems are permuted, so the
change should not cause any other failures. Added unit tests which fail before and pass after the fix.


Commit messages:
 - 8185635: TreeTableView selection changes on sorting

Changes: https://git.openjdk.java.net/jfx/pull/244/files
 Webrev: https://webrevs.openjdk.java.net/jfx/244/webrev.00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8193800
  Stats: 210 lines in 3 files changed: 123 ins; 32 del; 55 mod
  Patch: https://git.openjdk.java.net/jfx/pull/244.diff
  Fetch: git fetch https://git.openjdk.java.net/jfx pull/244/head:pull/244

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

More information about the openjfx-dev mailing list