HoiSinz
HoiSinz

Reputation: 11

Switching scenes in JavaFX(FXML) error

So, I'm trying to switch scenes in JavaFX but I can't seem to get it to work when I hard coded it I was able to get it working by using lambda expressions.

public class Main extends Application {

Stage window;
Scene scene1;
Scene scene2;

public static void main(String[] args) {
    launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
    window = primaryStage;

    Label label = new Label("Welcome to the first scene");
    Button bttn1 = new Button("Go to second scene");
    bttn1.setOnAction(e -> window.setScene(scene2));

    //Scene 1
    VBox layout1 = new VBox(20);
    layout1.getChildren().addAll(label, bttn1);
    scene1 = new Scene(layout1, 400, 400);

    //Scene 2
    Button bttn2 = new Button("Go to first scene");
    bttn2.setOnAction(e -> window.setScene(scene1));

    StackPane layout2 = new StackPane();
    layout2.getChildren().add(bttn2);
    scene2 = new Scene(layout2, 400, 500);

    window.setScene(scene1);
    window.setTitle("Test");
    window.show();
}

However the project involves a few different GUIs and I would prefer to design the GUI's in FXML Scene Builder than to hardcode them the FX way. However when I have tried to do the FXML way it hasn't worked an error is always appearing when I press the button.

Error message part 1 part 2

This is the document controller code.

public class FXMLDocumentController implements Initializable {

@FXML
private Button button1;

@FXML
private Button button2;

@FXML
private void handleButtonAction(ActionEvent event) throws IOException {
    Stage stage;
    Parent root;

   if(event.getSource() == button1){
       stage=(Stage)button1.getScene().getWindow();

       root = FXMLLoader.load(getClass().getResource("FXML2.fxml"));
   }
   else{
       stage=(Stage)button2.getScene().getWindow();
       root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
   }
   Scene scene = new Scene(root);
   stage.setScene(scene);
   stage.show();

}

@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
}    

}

Upvotes: 1

Views: 353

Answers (1)

jpell
jpell

Reputation: 173

The error you posted says the code is trying to load a button as an anchor pane. Check too see if you have an anchorpane with the fx:I'd of button1.

Upvotes: 2

Related Questions