2017-09-20 127 views
0

我有問題,我的應用程序不斷變化的場景看起來像的JavaFX拋出:IllegalArgumentException(已被設爲另一個場景根)

Main screen > Login screen 

我存儲在主文件屏幕爲hashmap<String, Node>,一切都很好,直到我去從登陸界面到主屏幕回來,想再次加載登錄界面,這裏是例外,代碼:

java.lang.IllegalArgumentException: [email protected][styleClass=root]is already set as root of another scene 

public static final HashMap<String, Parent> pages = new HashMap<>(); 

@FXML 
private void LogIn(ActionEvent event) { 
    Button button = (Button) event.getSource(); 
    Stage stage = (Stage) button.getScene().getWindow(); 
    if(stage.getScene() != null) {stage.setScene(null);} 
    Parent root = MyApplication.pages.get("LoginPage"); 
    Scene scene = new Scene(root, button.getScene().getWidth(), button.getScene().getHeight()); 
    stage.setScene(scene); 
} 

它,當我創建工程新anchorpane

Parent root = new AnchorPane(MyApplication.pages.get("LoginPage")); 

但我想知道爲什麼它給了我一個異常,如果我正在同臺

回答

1

例外的情況是不言自明:錨窗格不能是兩個不同的場景的根源。不是每次都創建一個新的場景,只需更換現有場景的根:

@FXML 
private void LogIn(ActionEvent event) { 
    Button button = (Button) event.getSource(); 
    Scene scene = button.getScene(); 
    Parent root = MyApplication.pages.get("LoginPage"); 
    scene.setRoot(root); 
} 
+0

真的感謝這就是解決我的問題 –

+0

@JasonBourne,你應該紀念這個問題的正確答案。 – Kerry

相關問題