2017-10-13 1 views
0

Donc, j'essaie de changer de scène en JavaFX mais je n'arrive pas à le faire fonctionner quand je l'ai codé en dur. J'ai pu le faire fonctionner en utilisant des expressions lambda.Commutation de scènes en erreur JavaFX (FXML)

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(); 
} 

Cependant, le projet comporte quelques différentes interfaces graphiques et je préfère concevoir l'interface graphique de scène dans FXML Builder que de les coder en dur le chemin FX. Cependant quand j'ai essayé de faire la manière FXML cela n'a pas fonctionné une erreur apparaît toujours quand j'appuie sur le bouton.

Message d'erreur part 1 part 2

C'est le code de contrôleur de document.

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 
}  

} 
+0

Dans votre message, 'Initializable {' et 'public extends Main extends Application {' ne sont pas formatés en tant que code. – SteveFest

+0

Désolé, je vais corriger ça maintenant. Merci pour l'endroit. – HoiSinz

Répondre

0

L'erreur que vous avez signalée indique que le code tente de charger un bouton en tant que volet d'ancrage. Vérifiez aussi voir si vous avez un anchorpane avec le fx: je devrais de button1.

+0

Je vais vérifier et vous faire savoir merci. – HoiSinz