Я хочу изменить центр пограничной области, когда я нажимаю меню, но появляется ошибка «Корневое значение уже указано». Сначала я инициализирую его, как показано ниже.
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
currentMenuNum = 0;
currentMenu = menuList[currentMenuNum];
currentViewerPath = "/managerworld/viewer/StartViewer.fxml";
System.out.println(currentMenu);
setControlItems(currentViewerPath,currentMenu);
}
private void setControlItems (String path, String currentMenu) {
//Display setting for menu
try {
fxmlLoader.setLocation(getClass().getResource(path));
anchorPane = fxmlLoader.load();
// fxmlLoader.load();
connectionViewerController = (ConnectionViewerController) fxmlLoader.getController();
} catch (Exception e) {
System.out.println(e.getStackTrace().toString());
System.out.println(e.getMessage());
}
borderPane.setCenter(anchorPane);
//controller setting
if (currentMenu.equals(currentMenu)) connectionViewerController = (ConnectionViewerController) fxmlLoader.getController();
else return;
//button setting
button2.setDisable(false);
button3.setDisable(false);
button4.setDisable(false);
button5.setDisable(false);
}
первая загрузка работает хорошо, но если я пытаюсь перезагрузить другой файл fxml, появляется ошибка.
@FXML
private void handleSelectMenus(MouseEvent event) {
if (event.getSource().equals(menuVBox1)) {
currentViewerPath = "/managerworld/viewer/ConnectionViewer.fxml";
currentMenuNum = 1;
currentMenu = menuList[currentMenuNum];
setControlItems(currentViewerPath,currentMenu);
} else {
}
}
и мои файлы fxml такие..
<AnchorPane prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
<children>
<VBox alignment="CENTER" prefHeight="653.0" prefWidth="792.0" style="-fx-border-color: #D3D3D3;" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<Text fill="#656565" strokeType="OUTSIDE" strokeWidth="0.0" text="Welcome to Manager World!">
<font>
<Font size="36.0" />
</font>
</Text>
<Text fill="#003975" layoutX="41.0" layoutY="329.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Click the Connection Menu to get started.">
<font>
<Font size="16.0" />
</font>
</Text>
</children>
</VBox>
</children>
</AnchorPane>
fxml, который включает пограничную панель, выглядит так..
<BorderPane fx:id="borderPane" maxHeight="768.0" maxWidth="1024.0" minHeight="768.0" minWidth="1024.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="managerworld.controller.ManagerWorldController">
<center>
</center>
и это то, что я хочу изменить, если я нажму на меню
<AnchorPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="managerworld.controller.ConnectionViewerController">
<children>
<VBox spacing="5.0" style="-fx-border-color: #D3D3D3;" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<GridPane alignment="CENTER_LEFT" layoutX="100.0" layoutY="100.0" BorderPane.alignment="CENTER">
Кто-нибудь поможет мне с этой проблемой?
FXMLLoader
вместо повторного использования одного и того же. - person James_D   schedule 22.11.2015root
изFXMLLoader
наnull
и созданием нового.)FXMLLoader
имеет больше состояний, чем простоroot
, который может быть инициализирован только один раз: например, контроллер и т. д. Так что я думаю, что даже с установкой для корня значения null, если вы попытаетесь повторно использовать тот жеfxmlLoader
для загрузки файла FXML с атрибутомfx:controller
, вы также получите сообщение об ошибке. Кроме того,fxmlLoader
содержит ссылки на все атрибутыfx:id
, и вам, вероятно, следует убедиться, что они очищены, чтобы избежать конфликтов. Гораздо безопаснее создать новый загрузчик. - person James_D   schedule 22.11.2015