Одна и та же сцена, другой Fxml - Javafx

1

Я новичок в JavaFX. У меня окно с вертикальной панелью. На левой стороне разделенной страницы у меня есть пара кнопок. На каждом нажатии кнопки мне нужно загрузить отдельный файл fxml в правой части разделяемой панели. Итак, здесь я вставляю скриншот, чтобы быть понятным.

Изображение 174551

Здесь на данный момент я открываю отдельный этап, отдельную сцену при нажатии кнопки поиска. Теперь мне нужно загрузить 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. Надеюсь, мой вопрос ясен. Спасибо за вашу помощь в ожидании.

Теги:
javafx
stage
scene

3 ответа

4

Вы можете взять панель с правой стороны, а затем загрузить 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();
}
  • 0
    Я пробую это. Я не достаточно ясно, чтобы преобразовать этот фрагмент кода в мое требование. Можете ли вы объяснить, с моим примером. Пожалуйста ....
2

В методе обработчика попробуйте:

сначала объявить анкорпан. В правой панели 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();
}
}
1

попробуйте прислушаться к нажатию кнопки, после того, как щелкнул его с помощью "FXMLLoader.load" для загрузки на основе корневого расширения, придумайте, как он говорит панель, и присвойте ему содержимое правой стороны.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню