Я новичок в JavaFX. У меня окно с вертикальной панелью. На левой стороне разделенной страницы у меня есть пара кнопок. На каждом нажатии кнопки мне нужно загрузить отдельный файл fxml в правой части разделяемой панели. Итак, здесь я вставляю скриншот, чтобы быть понятным.
Здесь на данный момент я открываю отдельный этап, отдельную сцену при нажатии кнопки поиска. Теперь мне нужно загрузить Searcher в правой части окна baselayout. Вот какой код загружает baseLayout.
@Override
public void start(Stage primaryStage) throws Exception {
this.primaryStage = primaryStage;
this.primaryStage.setTitle("Base Layout");
BaseController.setMlTool(this);
FXMLLoader loader = new FXMLLoader(MLTool.class.getResource("view/Base.fxml"));
baseLayout = (AnchorPane) loader.load();
Scene scene = new Scene(baseLayout);
primaryStage.setScene(scene);
primaryStage.show();
}
Вот код, который загружает Searcher при нажатии кнопки.
@FXML
private void initialize(){
System.out.println("Testing");
}
@FXML
private void handleSearchButton(){
System.out.println("Handle Button Called");
Stage search = new Stage();
FXMLLoader loader = new FXMLLoader(MLTool.class.getResource("view/Searcher.fxml"));
search.setTitle("Searcher");
try {
AnchorPane searcherPage = (AnchorPane) loader.load();
Scene scene = new Scene(searcherPage);
search.setScene(scene);
search.show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Здесь, как я могу загрузить Searcher в BaseLayout Rightide из панели split. Надеюсь, мой вопрос ясен. Спасибо за вашу помощь в ожидании.
Вы можете взять панель с правой стороны, а затем загрузить fxml в качестве дочернего узла этой панели. Этап одинаковый за все время, и вы можете загрузить fxml в панели. ex: MainWindow.fxml - это окно perent. Вы можете загрузить сцену.
Parent root = FXMLLoader.load(getClass().getResource("MainWindow.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
Теперь в MainWindow.fxml у вас есть разделенная панель. Поместите anchorPan с правой стороны, где вы хотите загрузить fxml при нажатии кнопки. Затем добавьте fxml как дочерний элемент в anchorpane.
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(fxml));
Pane cmdPane = (Pane) fxmlLoader.load();
try {
anchCmdController.getChildren().clear();
anchCmdController.getChildren().add(cmdPane);
fadeIn.playFromStart();
} catch (Exception e) {
e.printStackTrace();
}
В методе обработчика попробуйте:
сначала объявить анкорпан. В правой панели fxml установите anchorpane с именем anchCmdController.
@FXML
private AnchorPane anchCmdController;
затем обновите событие handleSearchButton.
@FXML
private void handleSearchButton() throws IOException {
System.out.println("Handle Button Called");
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("view/Searcher.fxml"));
Pane cmdPane = (Pane) fxmlLoader.load();
try {
/* NEED TO DECLARE ANCHOR PANE" */
anchCmdController.getChildren().clear();
anchCmdController.getChildren().add(cmdPane);
} catch (Exception e) {
e.printStackTrace();
}
}
попробуйте прислушаться к нажатию кнопки, после того, как щелкнул его с помощью "FXMLLoader.load" для загрузки на основе корневого расширения, придумайте, как он говорит панель, и присвойте ему содержимое правой стороны.