Это задокументировано. http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/todo.html#portablebinaryarchives
В Boost нет портативного архива.
Вы хотите посмотреть EOS Portable Archives: https://epa.codeplex.com/
Их очень легко удалить в коде базы и использования вместо boost::archive::binary_[io]archive
Я, наконец, нашел, что это работает после попытки!
@FXML Pane secPane;
public void loadFxml (ActionEvent event) {
Pane newLoadedPane = FXMLLoader.load(getClass().getResource("/application/fxml2.fxml"));
secPane.getChildren().add(newLoadedPane);
}
Простое изменение поля в классе контроллера не изменит график сцены.
secPane
- это просто ссылка на узел в графе сцены.
Если secPane
является просто заполнителем, вы можете заменить его в дочернем списке родителя:
public void loadFxml (ActionEvent event) {
// load new pane
Pane newPane = FXMLLoader.load(getClass().getResource("/application/Login2.fxml"));
// get children of parent of secPane (the VBox)
List<Node> parentChildren = ((Pane)secPane.getParent()).getChildren();
// replace the child that contained the old secPane
parentChildren.set(parentChildren.indexOf(secPane), newPane);
// store the new pane in the secPane field to allow replacing it the same way later
secPane = newPane;
}
Это предполагает, конечно, что getClass().getResource("/application/Login2.fxml")
дает правильный ресурс и не возвращает null
(что происходит если ресурс с указанным именем недоступен)
Вы можете реализовать что-то вроде этого:
public void start(Stage primaryStage) throws IOException {
primaryStage.setTitle("Title");
primaryStage.setScene(createScene(loadMainPane("path_of_your_fxml")));
primaryStage.show();
}
private Pane loadMainPane(String path) throws IOException {
FXMLLoader loader = new FXMLLoader();
Pane mainPane = (Pane) loader.load(
getClass().getResourceAsStream(path));
return mainPane;
}
private Scene createScene(Pane mainPane) {
Scene scene = new Scene(mainPane);
return scene;
}
Затем вы можете создать отдельный вызов класса для навигации, чтобы сохранить все ваши пути fxml:
public class Navigator {
private final String P1;
private final String P2;
//then you can implement getters...
public String getP1() {
return P1;
}
public String getP2() {
return p2;
}
private static FxmlController Controller;
public static void loadPane(String fxml) {
try {
FxmlController.setPane(
(Node) FXMLLoader.load(Navigator.class.getResource(fxml)));
} catch (IOException e) {
e.printStackTrace();
}
}
public Navigator() throws IOException {
this.P1 = "p1.fxml";
this.P2 = "p2.fxml";}
Затем вы можете загрузить вашей панели в вашей кнопке, как показано ниже:
@FXML
private void btnAction(ActionEvent event) throws IOException {
Navigator.load(new Navigator().getP1());
..
.