Я создал простой 3D-просмотрщик, используя SubScene и добавляя 3D-объекты в корневой элемент верхнего уровня.
public class Viewer extends AnchorPane {
private final PerspectiveCamera camera = new PerspectiveCamera(true);
private final Group root = new Group(camera)
public Viewer() {
SubScene scene = new SubScene(root, 300, 300, true, SceneAntialiasing.BALANCED);
}
public Group getRoot() {
return root;
}
Вызывая код, который пользователи Viewer могут затем получить рут, создать 3D-объекты и добавить их в корень. Это хорошо работает.
Однако я понял, что мне нужно логически разделить корень на три отдельные области из-за требований. Корень превратился в:
private final Group cameraGroup = new Group(camera);
private final Group lightGroup = new Group();
private final Group objectsGroup = new Group();
private final Group root = new Group(cameraGroup, lightGroup, objectsGroup);
Код вызова может добавить несколько камер, источников света, 3D-объектов через геттеры для вышеуказанных групп.
Вопрос:
Если я предоставляю код вызова с геттерами для каждой группы, то код вызова также должен постоянно приводить узлы в группе к заданным типам (например, камеры в cameraGroup). Вызывающий код может также добавить негрупповые типы в Группу, поскольку многие вещи в JavaFX наследуются от общего базового типа Node, и именно с этим работает Группа.
Предоставление отдельных методов получения, установки, удаления и т. Д., Которые приводят группы к спискам / наблюдаемым спискам каждого типа, усложняет интерфейс.
Есть ли способ создать группу? группа определенного типа? Или есть другой способ сделать мой дизайн?