Трудно сказать только по небольшим фрагментам кода, но моя общая рекомендация при работе с внешними интерфейсами - различать модель и рендеринг на каждом уровне. Это относится и к приложениям JavaFX, Swing и Angular.
Назначенный TableView, скорее всего, должен быть TableView<Appointee>
.
Для свойства appointee.group у вас есть два варианта: либо использовать Group
, либо (например, когда это приведет к созданию слишком большого количества дублирующихся данных при десериализации / сериализации из / в JSON), а затем использовать бизнес-ключ. Первый вариант обычно проще реализовать и работать с ним Во втором варианте вам понадобится какой-нибудь сервис / код для преобразования обратно в Group
и вам нужно подумать о том, где / на каком уровне именно вы хотите выполнить преобразование.
Давайте продолжим здесь со вторым вариантом, поскольку вы в настоящее время указали appointee.group как целое число.
В этом случае столбец группы должен быть TableColum<Appointee, Integer>
.
Ячейка группы тогда должна быть TableCell<Appointee, Integer>
.
До сих пор мы говорили только о модели, а не о рендеринге, за исключением того, что мы хотим отобразить назначенных лиц в таблице.
Я рекомендую сделать это также на следующем уровне.
Не используйте ComboBox<String>
для группового комбинированного списка, но ComboBox<Group>
. Строка - это способ отображения группы внутри comboBox, а группа - модель. Кроме того, ComboBox<Integer>
, тип бизнес-ключа, немного вводит в заблуждение (так как вам нужен comboBox для групп, а не целочисленный comboBox) и ограничивает гибкость вашего кода.
Используйте сервис преобразования / код, который я упоминал при предварительном выборе значения в поле со списком.
Ячейка группы должна иметь тип ListCell<Group>
, а в методе updateItem, который касается способа отображения группы, вы можете, например, используйте свойство name, чтобы получить представление String.
Конечно, есть варианты этого подхода, но убедитесь, что на каждом уровне вы знаете, что такое модель элемента управления и что такое средство визуализации элемента управления. Всегда проектируйте свой код, используя модель и используйте типы рендеринга только на самом низком уровне рендеринга.