2016-08-01 5 views

ответ

0

От TableView documentation:

По умолчанию в 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 объект).

+0

Спасибо, это помогло мне решить проблему, которая у меня была. – miquel09