2017-01-31 21 views
1

Я пытался сделать свое приложение переключаться между сценами. Вот копия части кода. Сцена кредитов просто имеет кнопку «Назад», которая должна вернуть меня на главную сцену.Сценарий переключения JavaFX

Когда я пытаюсь нажать кнопку «Кредиты» на главной сцене, становится белым белый экран. Я считаю, что есть лучший способ решить эту проблему, можете ли вы дать мне несколько советов?

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

ответ

1

Попробуйте переключить порядок строк:

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

здесь вы передаете getMainScene null.

+0

Я понимаю, но как я могу изменить его для правильной работы, потому что я передаю сцену кредитов getMainScene() и основную сцену в getCreditsScene. Выполняя это так, они не могут быть оба инициализированы –

+5

@JasonPer Сделать их поля вместо локальных переменных. Тогда вам не нужно передавать их в качестве параметров вообще. –

+0

@James_D точно. Или сделайте параметр для одной из сцен, которая возвращает вам ссылку на другую сцену. –