2017-01-31 3 views
1

J'ai essayé de faire de mon application pour basculer entre les scènes. Voici une copie d'une partie du code. La scène des crédits a simplement un bouton de retour qui devrait me ramener à la scène principale. Lorsque j'essaie de cliquer sur le bouton crédits sur la scène principale, il devient blanc un écran blanc. Je crois qu'il y a une meilleure façon de résoudre ce problème pourriez-vous me donner quelques conseils?JavaFX scènes de commutation

public class Application { 
public static void main(String[] args) { 
    javafx.application.Application.launch(GUI.class); 
} 
} 


public class GUI extends Application { 

@Override 
public void start(Stage primaryStage) { 
    Scene mainScene, creditsScene = null; 
    mainScene = getMainScene(primaryStage, creditsScene); 
    creditsScene = getCreditsScene(primaryStage, mainScene); 
    primaryStage.setTitle("Test application"); 
    primaryStage.setScene(mainScene); 
    primaryStage.show(); 
} 

private Scene getMainScene(Stage primaryStage, Scene creditsScene) { 
final Button credits = new Button("Credits"); 
    credits.setOnAction((ActionEvent e) -> { 
     primaryStage.close(); 
     primaryStage.setScene(creditsScene); 
     primaryStage.show(); 
    }); 
    VBox x = new VBox(50); 
    x.setAlignment(Pos.CENTER); 

    x.getChildren().addAll(run, displayInfo, 
      label1, displayInfo, textField, submitName, credits, exit); 

    //scene size 
    Scene scene = new Scene(x, 650, 900); 

    return scene; 
} 


private Scene getCreditsScene(Stage primaryStage, Scene main) { 
    final Button back = new Button("Back"); 
    back.setOnAction((ActionEvent e) -> { 
     primaryStage.setScene(main); 
    }); 
    VBox x = new VBox(50); 
    x.getChildren().addAll(back); 
    Scene credits = new Scene(x, 650, 900); 
    return credits; 
} 

Répondre

1

Essayez de changer l'ordre des chaînes:

mainScene = getMainScene(primaryStage, creditsScene); 
creditsScene = getCreditsScene(primaryStage, mainScene); 

ici vous passez à getMainScene null.

+0

Je comprends mais comment pourrais-je le changer pour fonctionner correctement parce que je passe la scène de crédits à getMainScene() et la scène principale à getCreditsScene. En procédant ainsi, ils ne peuvent pas être tous les deux initialisés. –

+5

@JasonPer Fais-leur des champs à la place des variables locales. Ensuite, vous n'avez pas besoin de les passer en paramètre. –

+0

@James_D exactement. Ou faites un param à l'une des scènes, ce qui vous renvoie une référence à une autre scène. –