2014-10-03 74 views
1

我想用JavaFX構建一個簡單的應用程序。問題是,當我第一次打開一個窗口(模態)進展順利。第二次,它給我這個例外:java.lang.IllegalArgumentException:AnchorPane [id = klantroot,styleClass = root]已經設置爲另一個場景的根目錄

java.lang.IllegalArgumentException異常:AnchorPane [ID = klantroot, 的styleClass =根]已被設爲另一個場景

的根既然我相當新的這個我真的不知道如何解決這個問題。有人可以提供一些幫助嗎。提前致謝。

在我maincontroller我有這樣的代碼:

private void showModal(Parent view, String title) { 
    Stage stage = new Stage(); 
    Scene scene = new Scene(view); 
    stage.setScene(scene); 
    stage.initModality(Modality.WINDOW_MODAL); 
    stage.initOwner(this.root.getScene().getWindow()); 
    stage.setTitle(title); 
    stage.showAndWait(); 
} 

@FXML 
private void handleToevoegenKlant() { 
    klantPresenter.setKlant(-1);   
    showModal(klantPresenter.getView(), "Toevoegen klant"); 
} 

在我klantPresenter我有:

<AnchorPane 
    fx:id="klantroot" 
    fx:controller="presenter.KlantPresenter" 
    prefHeight="274.0" prefWidth="483.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 

回答

2

Scene

@FXML private Parent klantroot; 

..... 

public Parent getView() { 
    return klantroot; 
} 

@FXML 
private void close() { 
    Stage stage = (Stage)getView().getScene().getWindow(); 
    stage.close(); 
}    

爲KlantView.fxml的代碼開頭只能有一個根元素,並且每個節點只能是se作爲一個場景的根。要將父級設置爲另一個場景的根,您需要中斷前一個關係。

showModal(...)方法中的代碼Scene scene = new Scene(view);將視圖作爲根分配給場景。所以當showModal(...)被再次調用父視圖的相同實例時,會出現錯誤。

溶液可以根據應用程式邏輯變化:

1)創建父視圖的新實例,並把它作爲一個參數。

2)添加幾行showModal(...)

if(view.getScene() != null) 
    view.getScene().setRoot(null); 

打破舊的關係。

3)你自己的解決方案?

+0

這是完美的工作。非常感謝! – 2014-10-03 11:29:52

+0

我有類似的問題,但我得到scene'e根不能爲空,當我嘗試設置根。 – 2016-08-24 13:19:37

相關問題