<div dir="ltr"><div>Hi,</div><div><br></div><div>Thank you both for reporting the problem and providing a solution.</div><div>I opened <a href="https://github.com/controlsfx/controlsfx/issues/1606">https://github.com/controlsfx/controlsfx/issues/1606</a> to keep track of the problem.</div><div><br></div><div>Marius, I think it would be good if you can provide a fix/PR.</div><div><br></div><div>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.</div><div><br></div><div>Thanks,</div><div><br></div><div>-- Daniel</div><div><br></div></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Mon, Nov 24, 2025 at 6:50 AM Marius Hanl <<a href="mailto:mariushanl@web.de">mariushanl@web.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)">The refresh changes could only be a problem if something in the Code is misbehaving.</div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)">I had a look, and indeed, the <strong>expandedNode</strong> is NEVER removed. The logic simply does not work, never did in the previous versions.</div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)">Prior to 26-ea+15, the table refresh was recreating ALL cells. This masked the bug.</div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)">But now, the refresh method really refreshes the existing cells. So rows and cells need to react to that, as they should before.</div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)"> </div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)">The root cause is, that the <strong>expandedNode</strong> is removed from the HashMap before it could be cleaned up in the corresponding TableRowSkin.</div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)">So when the TableRowSkin tries to remove the <strong>expandedNode</strong>, it is already null.</div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)">Removing the code fixes the issue:</div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)"> </div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)">
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)"> public BooleanProperty getExpandedProperty(S item) {<br> BooleanProperty value = expansionState.get(item);<br> if (value == null) {<br> value = new SimpleBooleanProperty(item, "expanded", false) {</div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)"> @Override<br> protected void invalidated() {<br>// if (!getValue()) {<br>// expandedNodeCache.remove(getBean());<br>// }<br> getTableView().refresh();<br> }<br> };<br> expansionState.put(item, value);<br> }<br> return value;<br> }</div>
</div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)"> </div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)">Again, this was also problematic before, but masked by the recreation.</div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)"> </div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)">To restore the old behavior, you could write:</div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)"> </div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)"> TableView<Person> table = new TableView<>() {<br> @Override<br> public void refresh() {<br> getProperties().put("recreateKey", Boolean.TRUE);<br> }<br> };</div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)"> </div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)">I don't know if ControlsFX is still somewhat maintained. Otherwise I can have file a PR there.</div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)"> </div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)">-- Marius</div>
<div style="font-family:"verdana";font-size:12px;color:rgb(0,0,0)"><span style="background-color:rgb(255,255,255)"> </span></div>
<div id="m_-5250323660400935519sub-body-container" style="margin:10px 5px 5px 10px;padding:10px 0px 10px 10px;border-left:2px solid rgb(195,217,229)">
<div style="margin:0px 0px 10px">
<div><strong>Gesendet: </strong>Sonntag, 23. November 2025 um 16:14</div>
<div><strong>Von: </strong>"Cormac Redmond" <<a href="mailto:credmond@certak.com" target="_blank">credmond@certak.com</a>></div>
<div><strong>An: </strong><a href="mailto:openjfx-dev@openjdk.org" target="_blank">openjfx-dev@openjdk.org</a></div>
<div><strong>Betreff: </strong>JFX 26-ea+15 TableView "bug" -- related to 8359599?</div>
</div>
<div>
<div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">Hi,</div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"> </div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">Since 26-ea+15, there may be a "bug" with TableView which appears to be rendering duplicated nodes.</div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"> </div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">I first noticed this when using ControlFX's TableRowExpanderColumn (<a href="https://controlsfx.github.io/javadoc/11.2.2/org.controlsfx.controls/org/controlsfx/control/table/TableRowExpanderColumn.html" rel="noopener noreferrer" target="_blank">https://controlsfx.github.io/javadoc/11.2.2/org.controlsfx.controls/org/controlsfx/control/table/TableRowExpanderColumn.html</a>), 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.</div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"> </div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">
<div style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif"><span style="color:rgb(0,0,0);font-family:verdana,sans-serif">I have created a gist consisting of a single runnable class. <span class="gmail_default">It's quite small, and no dependencies are required (minimal ControlsFX code copied into it):</span></span></div>
<div style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif"><span style="color:rgb(0,0,0);font-family:verdana,sans-serif"> </span></div>
</div>
</div>
<blockquote style="margin:0px 0px 0px 40px;border:medium;padding:0px">
<div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">
<div style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif"><span style="color:rgb(0,0,0);font-family:verdana,sans-serif"><a href="https://gist.github.com/credmond/57ed65a20c1b4d1cf0272a71642077b0" rel="noopener noreferrer" target="_blank">https://gist.github.com/credmond/57ed65a20c1b4d1cf0272a71642077b0</a></span></div>
</div>
</div>
</blockquote>
<div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">
<div class="gmail_default"> </div>
<div class="gmail_default">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):</div>
<div class="gmail_default"> </div>
</div>
</div>
<blockquote style="margin:0px 0px 0px 40px;border:medium;padding:0px">
<div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">
<div class="gmail_default"><a href="https://github.com/openjdk/jfx/commit/02756a810c54c4068505eca6d43c1ba2a136e04e" rel="noopener noreferrer" target="_blank">https://github.com/openjdk/jfx/commit/02756a810c54c4068505eca6d43c1ba2a136e04e</a></div>
</div>
</div>
</blockquote>
<div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">
<div style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif"> </div>
</div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"> </div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">The application starts out like this on all versions, there's three rows (number of rows is irrelevant):</div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"><img style="margin-right: 0px;" src="cid:ii_19ab68c9b37cb971f163" alt="image.png" width="562" height="404"></div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"> </div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">Click the +'s and -'s more than once.</div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"> </div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">26-ea+15 "bug"; notice the duplications that appear just by clicking the + / -'s a couple of times:</div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"><img src="cid:ii_19ab68c9b37cb971f161" alt="image.png" width="562" height="406"></div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"> </div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">26-ea+14 (and previous) expected / normal behaviour:</div>
<img src="cid:ii_19ab68c9b37cb971f162" alt="image.png" width="562" height="404"><br><br></div>
<div><span style="color:rgb(0,0,0);font-family:verdana,sans-serif"><span class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)"> </span></span></div>
<div> </div>
<div>
<div class="gmail_signature">
<div>
<div><span style="color:rgb(0,0,0);font-family:verdana,sans-serif"> </span></div>
<div><span style="color:rgb(0,0,0);font-family:verdana,sans-serif"><span class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(0,0,0)">Kind </span>Regards,</span></div>
<span style="color:rgb(0,0,0);font-family:verdana,sans-serif"><strong>Cormac Redmond</strong></span>
<div> </div>
<div> </div>
<div> </div>
</div>
</div>
</div>
</div>
</div></blockquote></div>