JFX 26-ea+15 TableView "bug" -- related to 8359599?
Daniel Peintner
daniel.peintner at gmail.com
Mon Nov 24 15:50:06 UTC 2025
Hi,
Thank you both for reporting the problem and providing a solution.
I opened https://github.com/controlsfx/controlsfx/issues/1606 to keep track
of the problem.
Marius, I think it would be good if you can provide a fix/PR.
Note: I am not one of the maintainers of ControlsFX but a user and I think
it is good if we can resolve the problem.
Thanks,
-- Daniel
On Mon, Nov 24, 2025 at 6:50 AM Marius Hanl <mariushanl at web.de> wrote:
> The refresh changes could only be a problem if something in the Code is
> misbehaving.
> I had a look, and indeed, the *expandedNode* is NEVER removed. The logic
> simply does not work, never did in the previous versions.
> Prior to 26-ea+15, the table refresh was recreating ALL cells. This masked
> the bug.
> But now, the refresh method really refreshes the existing cells. So rows
> and cells need to react to that, as they should before.
>
> The root cause is, that the *expandedNode* is removed from the HashMap
> before it could be cleaned up in the corresponding TableRowSkin.
> So when the TableRowSkin tries to remove the *expandedNode*, it is
> already null.
> Removing the code fixes the issue:
>
> public BooleanProperty getExpandedProperty(S item) {
> BooleanProperty value = expansionState.get(item);
> if (value == null) {
> value = new SimpleBooleanProperty(item, "expanded",
> false) {
> @Override
> protected void invalidated() {
> // if (!getValue()) {
> // expandedNodeCache.remove(getBean());
> // }
> getTableView().refresh();
> }
> };
> expansionState.put(item, value);
> }
> return value;
> }
>
> Again, this was also problematic before, but masked by the recreation.
>
> To restore the old behavior, you could write:
>
> TableView<Person> table = new TableView<>() {
> @Override
> public void refresh() {
> getProperties().put("recreateKey", Boolean.TRUE);
> }
> };
>
> I don't know if ControlsFX is still somewhat maintained. Otherwise I can
> have file a PR there.
>
> -- Marius
>
> *Gesendet: *Sonntag, 23. November 2025 um 16:14
> *Von: *"Cormac Redmond" <credmond at certak.com>
> *An: *openjfx-dev at openjdk.org
> *Betreff: *JFX 26-ea+15 TableView "bug" -- related to 8359599?
> Hi,
>
> Since 26-ea+15, there may be a "bug" with TableView which appears to be
> rendering duplicated nodes.
>
> I first noticed this when using ControlFX's TableRowExpanderColumn (
> https://controlsfx.github.io/javadoc/11.2.2/org.controlsfx.controls/org/controlsfx/control/table/TableRowExpanderColumn.html),
> which has been working as expected for several years, right up until
> 26-ea+15. This column just provides a simple way to allow expansion of
> table rows.
>
> I have created a gist consisting of a single runnable class. It's quite
> small, and no dependencies are required (minimal ControlsFX code copied
> into it):
>
>
> https://gist.github.com/credmond/57ed65a20c1b4d1cf0272a71642077b0
>
>
> Run this on 26-ea+15, and you'll see the issue re: duplicated rendering;
> run it on anything older, and there's no issue. If I had to guess, I'd say
> this issue is related to this commit (8359599):
>
>
>
> https://github.com/openjdk/jfx/commit/02756a810c54c4068505eca6d43c1ba2a136e04e
>
>
>
> The application starts out like this on all versions, there's three rows
> (number of rows is irrelevant):
> [image: image.png]
>
> Click the +'s and -'s more than once.
>
> 26-ea+15 "bug"; notice the duplications that appear just by clicking the +
> / -'s a couple of times:
> [image: image.png]
>
> 26-ea+14 (and previous) expected / normal behaviour:
> [image: image.png]
>
>
>
>
> Kind Regards,
> *Cormac Redmond*
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20251124/795d0a7c/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 26865 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20251124/795d0a7c/image-0003.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 31020 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20251124/795d0a7c/image-0004.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 14498 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20251124/795d0a7c/image-0005.png>
More information about the openjfx-dev
mailing list