Динамически открывать интерфейсы FXML, передавая переменную - PullRequest
2 голосов
/ 11 октября 2019

Intro:

Привет, у меня проблемы с FXML, и это сводит меня с ума.

История вопроса:

Я построил древовидную структуру данныхв Java это дерево представляет «состояние» моего GUI (Human interface). Для каждого узла этого дерева я хотел бы иметь соответствующий файл FXML, имя которого хранится в узлах дерева. Я надеюсь открыть корневой узел (специальные узлы в дереве) и вставить в него несколько свободных файлов FXML, в зависимости от текущего состояния дерева.

Проблемы:

  • Я не знаю, как передать переменные из приложения в FXML

  • Я не знаю, как создать экземпляр FXML с помощью fx:include, отправить ему некоторые строковые параметры с помощьюссылки (на другой FXML) и создание гибкого приложения.

Что я пробовал

Все, что выглядело удаленно, как решение, вплоть до страницы Google 4, (duckduckgoстраница 2). Я не смог много попробовать, потому что, очевидно, никто никогда не хотел загружать страницы переменных / fxml.

Я также следовал этому руководству.

Класс приложения:

public class Main extends Application {
  @Override
  public void start(Stage primaryStage) throws Exception {
    FXML loader = new   FXMLLoader(getClass().getResource("sample.fxml"));
    Map<String, Object> namespace = loader.getNamespace();

    namespace.put("a", "sample2.fxml");
    primaryStage.setTitle("Hello World");
    primaryStage.setScene(new Scene(loader.load(), 300, 275);
    primaryStage.show();
  }
  public static void main(String[] args){launch(args);}
}

Файл FXML с include:

<GridPane fx:controller="sample.Controller"
  xmlns:fx = "http://javafx.com/fxml" alignment="center" hgap="10"     vgap="10">

    <fx:include source = "$a"/>
</GridPane>

Что происходит с данным примером

FXML не компилируется, потому что он не знает "$ a"

...