Как мне перезвонить на главный узел, чтобы я мог переключиться на другую сцену в javafx - PullRequest
1 голос
/ 02 марта 2020

, поэтому я пытаюсь переключиться на другую сцену в javafx. Я работаю над проектом, в котором пользователь выберет категорию продуктов с помощью комбинированного списка, который переключится на новую сцену, в которой есть все рецепты в указанной категории c.

Проблема в том, что я могу загрузить свой MainMenuScene, но я не уверен, как переключиться на другую сцену, что я думаю из-за того, как я структурировал свой код.

Мой код структурирован так, что я могу GUIAPP (который запускает весь GUI)


    private static View myView;
    private static Recipe myRecipe; 



    public GUIApp() {

        myView = new View(); 
        myRecipe = new Recipe(); 

    }   

    public static View getView() {
        return myView; 
    }
    public static Recipe getRecipe() {
        return myRecipe;
    }

    @Override 
    public void start(Stage primaryStage) throws Exception {
        System.out.println("Starting app...");
        myView.setStage(primaryStage); 

    }

    public static void main(String [] args) {
        myRecipe = new Recipe(); 
        launch(args); 
    }
}

Then View, который устанавливает основную стадию (которая является MainMenuScene)


    private Stage myStage;
    private Scene myMainMenuScene;
    private Scene myMealScene;

    public View() {

        myMainMenuScene = new MainMenuScene(new BorderPane()); 

    }

    public Stage getStage() {
        return myStage;
    }

    public Scene getMealScene() {
        return myMealScene; 
    }


    public void setStage(Stage primaryStage) {
        myStage = primaryStage;
        myStage.setScene(myMainMenuScene);
        myStage.setTitle("Recipe Database");
        myStage.setWidth(600);
        myStage.setHeight(400);

        Scene scene = myMainMenuScene;
        myStage.setScene(scene);
        myStage.show();

    }



}

Вот MainMenuScene, где он вызывает код рецепта, который я сделал ранее


    private BorderPane myRoot;
    private String f, t;
    Label label = new Label();

    public MainMenuScene(Parent root) {
        super(root);

        myRoot = (BorderPane) root; 
        BorderPane titleBox = new BorderPane();
        titleBox.setStyle("-fx-font: 24 arial;");
        myRoot.setTop(titleBox);

        Text title = new Text("Recipe Database Tool");
        title.setFont(new Font(50));
        titleBox.setCenter(title);

        //VBox and HBox creation 
        VBox leftBox = new VBox();
        VBox rightBox = new VBox();
        VBox centerBox = new VBox();        

        //Button search = new Button("Recipe Categories");
        Button create = new Button("Create/Upload a New Recipe");

        //Creates a combobox that gets the category name from Recipe
        ComboBox<String> search = new ComboBox<String>();
        search.getItems().addAll(GUIApp.getRecipe().getCategory()); 

        search.setOnAction((e) -> {
            search.getSelectionModel().selectFirst();
        });
        /*
        ****//Create a button that switches to MealScene when a category is selected 
        Button select = new Button("Select");
        select.setOnAction((e) -> {
            View.getStage().setScene(View.getMealScene());****

        });
        */
        //myRoot for each Box 
        myRoot.setLeft(leftBox);
        myRoot.setRight(rightBox);
        myRoot.setCenter(centerBox);

        //adding the search categories button to the left box
        leftBox.setAlignment(Pos.CENTER);
        leftBox.setSpacing(30);
        leftBox.getChildren().add(search);

        //adding the create a new recipe to the right box
        rightBox.setAlignment(Pos.CENTER);
        rightBox.setSpacing(30);
        rightBox.getChildren().add(create); 


    }



}

Я пытался вызвать кнопку с помощью View, но я получаю сообщение об ошибке, которое я не уверен, как исправить ,

Вот ошибка: View.getStage() просит сделать getStage методом stati c в View, который я не хочу делать, и View.getMealScene также стану stati c

Пожалуйста, дайте мне знать! Я хотел бы узнать, как предотвратить это в будущем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...