Можно ли добавить новый узел или родительский элемент к уже загруженному файлу fxml в javafx? - PullRequest
0 голосов
/ 10 июня 2018

Я недавно пишу приложение javafx, и в одной из его частей клиент должен ждать, пока сервер получит список людей, и после получения списка он должен быть использован в просмотре списка, который будет добавлен вродитель.Это родительский файл и файл fxml, и после загрузки я хочу знать, возможно ли добавить vbox, содержащий просмотр списка, к родителю или нет.Буду признателен, если кто-нибудь сможет помочь ...

1 Ответ

0 голосов
/ 11 июня 2018

Из вашего вопроса я понимаю, что вы не знакомы с идеей контроллера или соответствующей инъекцией FXML, выполняемой FXMLLoader. В этом ответе James_D рассматриваются самые основы жизненного цикла JavaFX, но сначала рассматриваются основы процедуры, используемой при загрузке файла FXML.Если вы хотите изменить граф сцены, загруженный через FXML, вам нужно использовать класс контроллера с соответствующими FXML аннотированными полями.Например, предположим, что ваш родитель BorderPane.В вашем файле FXML у вас будет:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.BorderPane?>

<BorderPane fx:id="parent" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/10.0.1" 
        fx:controller="some.package.YourController">

    <top>
        <!-- maybe have something like a MenuBar here -->
    </top>

    <bottom>
        <!-- maybe have a some type of status bar here -->
    </bottom>

</BorderPane>

Обратите внимание на атрибут fx:controller;это имя класса для создания экземпляра и использования в качестве контроллера.Также обратите внимание на атрибут fx:id.В вашем классе контроллера у вас будет:

package some.package;

import javafx.scene.layout.BorderPane;
import javafx.fxml.FXML;

public class YourController {

    @FXML
    private BorderPane parent; // field name matches the fx:id attribute

    @FXML
    private void initialize() {
        // do any initializing if needed (if not, get rid of this method)
        // you can access and modify any FXML injected field from this method
    }

}

Тогда вы можете использовать родительский элемент через экземпляр контроллера.Вы также можете создавать и связывать методы обработчика событий в контроллере и выполнять определенное поведение в зависимости от действий пользователя.Однако важно отметить, что то, как вы изменяете состояние пользовательского интерфейса в контроллерах, зависит от того, как вы получаете доступ к классам модели.Вам нужно будет иметь доступную модель для вашего контроллера и, возможно, разделить ее между несколькими контроллерами.В «Переполнении стека» имеется достаточное количество вопросов / ответов о том, как это сделать.

Вот еще один ресурс, который может вам помочь: Введение в FXML .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...