< prev index next >

modules/javafx.controls/src/main/java/javafx/scene/control/TableCell.java

Print this page
rev 10463 : 8089514: [TableView, TreeView, ListView, TreeTableView] Clicking outside of the edited cell, node, or entry should commit the value

@@ -335,30 +335,30 @@
 
     /** {@inheritDoc} */
     @Override public void commitEdit(T newValue) {
         if (! isEditing()) return;
 
+        // inform parent classes of the commit, so that they can switch us
+        // out of the editing state.
+        // This MUST come before the updateItem call below, otherwise it will
+        // call cancelEdit(), resulting in both commit and cancel events being
+        // fired (as identified in RT-29650)
+        super.commitEdit(newValue);
+
         final TableView<S> table = getTableView();
         if (table != null) {
             // Inform the TableView of the edit being ready to be committed.
             CellEditEvent editEvent = new CellEditEvent(
                 table,
-                table.getEditingCell(),
+                new TablePosition<>(getTableView(), getIndex(), getTableColumn()),
                 TableColumn.editCommitEvent(),
                 newValue
             );
 
             Event.fireEvent(getTableColumn(), editEvent);
         }
 
-        // inform parent classes of the commit, so that they can switch us
-        // out of the editing state.
-        // This MUST come before the updateItem call below, otherwise it will
-        // call cancelEdit(), resulting in both commit and cancel events being
-        // fired (as identified in RT-29650)
-        super.commitEdit(newValue);
-
         // update the item within this cell, so that it represents the new value
         updateItem(newValue, false);
 
         if (table != null) {
             // reset the editing cell on the TableView

@@ -381,11 +381,11 @@
         super.cancelEdit();
 
         // reset the editing index on the TableView
         if (table != null) {
             TablePosition<S,?> editingCell = table.getEditingCell();
-            if (updateEditingIndex) table.edit(-1, null);
+            table.edit(-1, null);
 
             // request focus back onto the table, only if the current focus
             // owner has the table as a parent (otherwise the user might have
             // clicked out of the table entirely and given focus to something else.
             // It would be rude of us to request it back again.

@@ -550,27 +550,19 @@
 
     private void updateEditing() {
         if (getIndex() == -1 || getTableView() == null) return;
 
         TablePosition<S,?> editCell = getTableView().getEditingCell();
+
         boolean match = match(editCell);
 
         if (match && ! isEditing()) {
             startEdit();
         } else if (! match && isEditing()) {
-            // If my index is not the one being edited then I need to cancel
-            // the edit. The tricky thing here is that as part of this call
-            // I cannot end up calling list.edit(-1) the way that the standard
-            // cancelEdit method would do. Yet, I need to call cancelEdit
-            // so that subclasses which override cancelEdit can execute. So,
-            // I have to use a kind of hacky flag workaround.
-            updateEditingIndex = false;
-            cancelEdit();
-            updateEditingIndex = true;
+            attemptEditCommit();
         }
     }
-    private boolean updateEditingIndex = true;
 
     private boolean match(TablePosition<S,?> pos) {
         return pos != null && pos.getRow() == getIndex() && pos.getTableColumn() == getTableColumn();
     }
 
< prev index next >