JavaFX: метод ScrollPane getChildren () не виден
Я создал сцену из AnchorPane и некоторых дочерних элементов (AnchorPane и его дочерние элементы были созданы в Java Scene Builder), и иерархия показана ниже:

Сцена и сцена, конечно, создаются программно при инициализации программы.
Я хочу также добавить программно GridPane в качестве дочернего элемента ScrollPane, показанного в образе.
В моей программе (контроллер конкретного окна) я могу получить ссылку на ScrollPane:
@FXML
private ScrollPane srcPaneUsers;
(идентификатор srcPaneUsers был задан через соответствующее поле окон свойств конструктора сцен)
Однако!!: Когда я пытаюсь программно добавить новую GridPane, созданную во время выполнения через следующие строки метода initialize контроллера:
public void initialize(URL location, ResourceBundle resources) {
myGridPane = new GridPane();
srcPaneUsers.getChildren().add(myGridPane);
}
Я получаю ошибку времени компиляции, которая говорит:
" метод getChildren () из типа Parent не виден."
И поэтому я не могу добавить свой GridPane во время выполнения.
Есть идеи?
1 ответ:
Вы вызываете неправильный метод. Вам нужно
srcPaneUsers.setContent(myGridPane);Метод
getChildren(), определенный вParent, является защищенным методом. Он переопределен вPane, чтобы быть общедоступным методом, поэтому для панелей компоновки(GridPane,BorderPane, и т.д.) Вы можете непосредственно манипулировать списком дочерних узлов.
ScrollPane'S иерархияScrollPane extends Control extends Region extends Parent, поэтому она наследуетprotectedgetChildren()метод. И это действительно имеет смысл: дочерние узлы aScrollPane- это такие вещи, как видовой экран (который зажимает вид содержимого) и полосы прокрутки: вы на самом деле не нужно, чтобы пользователь манипулировал ими, иначе то, что вы получите, скорее всего, больше не будет функционировать правильно.ScrollPanes действительно имеют только один настраиваемый узел: Узел, для которогоScrollPaneпредоставляет представление: это называется егоcontentи доступ к которому осуществляется черезcontentProperty(),getContent(), и методыsetContent().Аналогично работают и другие "контейнерные элементы управления". Класс
Обратите внимание, чтоTabPaneпредоставляет методgetTabs(), который возвращает методObservableList<Tab>; А классTab, в свою очередь, предоставляет методcontentProperty()таким образом, вы можете получить доступ к содержимому каждой отдельной вкладки. ВкладкаSplitPaneпредоставляет методgetItems(), возвращающийObservableList<Node>для узлов, отображаемых на панели. В случае aSplitPaneего дочерние узлы больше, чем элементы: они включают визуальные компоненты, представляющие разделители и т. д. В обоих этих случаях методgetChildren()является защищенным методом (наследуется отParent).Parentтакже определяет открытый методgetChildrenUnmodifiable(), который возвращает неизменяемое представление списка дочерних узлов. Вы можно использовать это для изучения иерархии узлов любого родителя, но не изменять ее. (Однако для отладки, особенно для работы с CSS, я рекомендую использоватьScenicView .)
Comments