< 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 >