Я пытаюсь переписать свое приложение для Android в JavaFX и застрял с одной проблемой.
Краткое описание проблемы выглядит следующим образом:
1) У меня есть иерархия классов с корнемabstract class Field
и количество дочерних классов, таких как FieldCat
, FieldZebra
, FieldDog
и т. Д. - каждый из этих классов имеет свою собственную достаточно уникальную структуру и визуальное представление (в виде FXML)
2) Есть ListView
, который должен показывать список объектов, принадлежащих иерархии Field
- хранится в ObservableList<Field> listItems
3) И теперь мне нужно раздуть каждый из моих FieldWhatever
объектов как отдельную строку в ListView
Заявление
Я не могу сделать это с помощью JavaFX ListView
control (?!)
Proof
Единственный способ создать элемент ListView
- предоставить CellFactory
:
public class FieldsListCellFactory<T extends Field> implements Callback<ListView<T>, ListCell<T>> {
@Override
public ListCell<T> call(ListView<T> listView) {
//blah-blah
}
}
Фабрика сама получает один параметр ListView
, поэтому может генерировать тот же ListCell
длявсе элементы ListView
- другими словами, я не могу заполнить различные элементы пользовательского интерфейса в зависимости от базового FieldWhatever
объект.
С самого начала я даже не мог в это поверить - как это возможно?В Android я мог раздуть любой вид сложности пользовательского интерфейса в зависимости от типа объекта / иерархии и так далее, но в JavaFX - невозможно?Поверьте мне - я потратил часы, пытаясь это исправить - бесполезно.
Вопросы
- Я прав (я был бы очень рад услышать, что я неправ)
- Что делать с?Как разрешить ситуацию и поставить / разместить / надуть в списке List / Table совершенно разные объекты / классы / сущности?