Мне было интересно, если метод commitEdit() TableCell в JavaFX обновляет свойство объекта, представляющего строку.Изменяет свойства commitedit() свойства объекта?
ответ
По умолчанию в
TableColumn
редактирования совершить обработчик ненулевой с обработчиком в по умолчанию, который пытается перезаписать значение свойства для элемента в настоящий момент бытийных отредактированных строк , Он может это сделать, поскольку метод 10 передается в новом значении, а это , переданному обработчику фиксации прав черезCellEditEvent
, который запускается . Для получения этого значения просто нужно позвонитьTableColumn.CellEditEvent.getNewValue()
.Это очень важно отметить, что, если вы звоните
TableColumn.setOnEditCommit(javafx.event.EventHandler)
с вашим собственнымEventHandler
, то вы будете удаления обработчика по умолчанию. Если вы затем обрабатываете обратную запись свойства (или соответствующие данные источник), ничего не произойдет. Вы можете обойти это, используя методTableColumnBase.addEventHandler(javafx.event.EventType, javafx.event.EventHandler)
, чтобы добавитьTableColumn.EDIT_COMMIT_EVENT
EventType с нужнымEventHandler
в качестве второго аргумента. Используя этот метод, вы не замените реализацию по умолчанию , но вы будете уведомлены, когда произошла ошибка фиксации .
Так по умолчанию вызов commitEdit(...)
причина в TableColumn
попытаться обновить значение, представленное в клетке. Если вы установите обработчик событий, вызвав TableColumn.setOnEditCommit(...)
, вы удалите поведение по умолчанию.
Обратите внимание, что механизм по умолчанию работает путем литья объекта, возвращаемого столбцом cellValueFactory
, на WritableValue
и вызывает его метод setValue()
. Таким образом, это будет (по существу) работать, только если модель поддержки для таблицы использует JavaFX properties pattern. Другими словами, вы должны иметь что-то эквивалентно
column.setCellValueFactory(cellData -> cellData.getValue().xxxProperty());
где метод xxxProperty()
в модели для вашей таблицы возвращает реализацию WritableValue
(например, Property
объект).
Спасибо, это помогло мне решить проблему, которая у меня была. – miquel09