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 во время выполнения.
Есть идеи?

877   1  

1 ответ:

Вы вызываете неправильный метод. Вам нужно

srcPaneUsers.setContent(myGridPane);

Метод getChildren(), определенный в Parent, является защищенным методом. Он переопределен в Pane, чтобы быть общедоступным методом, поэтому для панелей компоновки(GridPane, BorderPane, и т.д.) Вы можете непосредственно манипулировать списком дочерних узлов.

ScrollPane'S иерархия ScrollPane extends Control extends Region extends Parent, поэтому она наследует protected getChildren() метод. И это действительно имеет смысл: дочерние узлы a ScrollPane - это такие вещи, как видовой экран (который зажимает вид содержимого) и полосы прокрутки: вы на самом деле не нужно, чтобы пользователь манипулировал ими, иначе то, что вы получите, скорее всего, больше не будет функционировать правильно. ScrollPanes действительно имеют только один настраиваемый узел: Узел, для которого ScrollPane предоставляет представление: это называется его content и доступ к которому осуществляется через contentProperty(), getContent(), и методы setContent().

Аналогично работают и другие "контейнерные элементы управления". Класс TabPane предоставляет метод getTabs(), который возвращает метод ObservableList<Tab>; А класс Tab, в свою очередь, предоставляет метод contentProperty() таким образом, вы можете получить доступ к содержимому каждой отдельной вкладки. Вкладка SplitPane предоставляет метод getItems(), возвращающий ObservableList<Node> для узлов, отображаемых на панели. В случае a SplitPane его дочерние узлы больше, чем элементы: они включают визуальные компоненты, представляющие разделители и т. д. В обоих этих случаях метод getChildren() является защищенным методом (наследуется от Parent).

Обратите внимание, что Parent также определяет открытый метод getChildrenUnmodifiable(), который возвращает неизменяемое представление списка дочерних узлов. Вы можно использовать это для изучения иерархии узлов любого родителя, но не изменять ее. (Однако для отладки, особенно для работы с CSS, я рекомендую использоватьScenicView .)

Comments

    Ничего не найдено.