Это связано с моим предыдущим вопросом.
У меня есть TreeView в центральной панели макета BorderPane. Этот TreeView заполняется выбором элемента из списка на левой панели. Вид в центре выглядит так:
class CenterView : View() {
override val root = TreeView<IStoryItem>()
init {
with(root) {
root = TreeItem(controller.storySet)
setCellFactory {
object : StoryEditorCell() {
init {
System.out.println("Creating StoryEditorCell")
onDragDetected = EventHandler {...}
onDragOver= EventHandler {...}
onDragEntered= EventHandler {...}
...
}
}
}
cellFormat { ... }
populate { ... }
}
}
}
Функция setCellFactory
вызывается, но по какой-то причине init
самой фабрики никогда не вызывается. Поэтому мои обработчики перетаскивания никогда не настраиваются, а мой TreeCell
имеет неправильный тип.
Формат ячейки правильный, и TreeView
заполнено правильно, так что часть работает правильно. Что еще нужно сделать, чтобы получить правильную клеточную фабрику?
cellFormat
перезаписывает вашcellFactory
. Вы не должны использоватьsetCellFactory
ИcellFormat
. Вместо этого переопределитеupdateItem
внутри фабрики ячеек. Сегодня я дам лучший ответ, а также добавлю API для DND в TornadoFX, чтобы вы могли комбинировать его сcellFormat
. - person Edvin Syse   schedule 14.09.2017