fyi: the inconsistently must be resolved (back) to checking for column
!= null in all edit methods. The reason is that the event is fired
onto the column as target, which must be not null. Can be seen in the
test below (concededly very artificial):
@Test
public void testEditCancelNoColumn() {
table.setEditable(true);
cell.updateTableView(table);
// force artificially not-empty cell state
TableCellShim.set_lockItemOnEdit(cell, true);
CellShim.updateItem(cell, "something", false);
// start edit: succeeds without firing event (null check
against column)
cell.startEdit();
assertTrue(cell.isEditing());
// cancel edit: NPE from Event.fire - which must (all params
must be != null)
cell.cancelEdit();
assertFalse(cell.isEditing());
}
will file an issue.
Thanks for your feedback :)
Zitat von Jeanette Winzenburg <faste...@swingempire.de>:
Hi Jonathan,
thanks for quick reply :) Yeah, agree that inconsistency looks
unintentional - leaving the question which way to go.
Meanwhile I found the commit that changed the logic for cancel:
since RT-18513 (https://bugs.openjdk.java.net/browse/JDK-8116392 -
ListView stackoverflow) it is similar as today:
super.cancel();
if (table != null) {
table.edit(-1, null);
fireEvent
before it was:
it (getTableColumn() != null) {
fireEvent
}
super.cancel();
if (table != null) table.edit(-1, null)
the older feels like the way to go, what do you think?
Anyway, will try to find tests to detect side-effects of the one or other.
Thanks again, Jeanette
Zitat von Jonathan Giles <jonat...@jonathangiles.net>:
Seeing as I wrote the code, I wish I could remember why it is that way, but
I unfortunately can't. My initial instinct is that this was unintentional,
but I can't discount the possibility that a reason exists.
I probably have much earlier versions of the code lying around, so I could
research it if necessary, but I'd suggest making it consistent first and
seeing if anything jumps out at you.
-- Jonathan
On Tue, 6 Jul 2021, 9:15 pm Jeanette Winzenburg, <faste...@swingempire.de>
wrote:
Just noticed an inconsistency in event firing pattern in tableCell's
xxEdit methods:
the pattern in cancel/commit:
if (table != null) {
// create and fire the event
in start:
if (column != null) {
// create and fire the event
usual question: bug or feature? Could there be any reason for the
difference? As I can't think of any, so the usual tracking into
history: it was there since the beginning of time, earliest in git is
e89e55e07972ce208ed5f89d091946392dc98114 add javafx-ui-control
classes 2011-11-10
which seems to be the same as master 2.1
(
http://hg.openjdk.java.net/openjfx/2.1/master/rt/file/b7d368850c33/javafx-ui-controls/src/javafx/scene/control/TableCell.java)
in old
mercurial
Any earlier versions that are accessible, if so where?