从Scene中提取内容

时间:2014-01-31 02:25:10

标签: java javafx javafx-2

我正在尝试从场景中提取内容并放入窗格。问题是如果我从场景中获取根组件并将其添加到窗格中,则窗格中不会显示任何内容。

注意:场景未添加到舞台或任何其他组件。

以下是我的(现在是凌乱的)代码:

  

公共类JanelaPrincipalController扩展了Controller实现   可初始化{

@FXML
private ResourceBundle resources;

@FXML
private URL location;

@FXML
private StackPane conteudo;

@FXML
private MenuItem miBolsas;

@FXML
private MenuItem miCorretoras;

/**
 * Initializes the controller class.
 */
@Override
public void initialize(URL url, ResourceBundle rb) {
    miBolsas.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent t) {
            System.out.println("Action performed");
            conteudo.getChildren().clear();
            SceneData sceneData = MainClass.getInstance().getScene(SceneType.LISTA_BOLSAS);
            Parent root = sceneData.scene().getRoot();
            conteudo.getChildren().add(root);
            //conteudo.getChildren().add(new Label("Teste"));
        }
    });
}

@Override
public void open() {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

@Override
public void process(Action action) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

@Override
public void close() {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
     

}

2 个答案:

答案 0 :(得分:1)

同一节点(在本例中为Parent),不会显示为twise,因此,如果您的场景正在显示,则需要从场景中删除root,然后将其添加到stackpane。

答案 1 :(得分:0)

问题在于现场。根节点已添加到场景中,因此无法在其他位置显示。必须从场景中删除节点。

我正在重构代码,我现在不需要直接向场景添加一些内容。

我在我的MainClass中使用了这个方法:

public static SceneData loadSceneFromFXML(final String fxmlFile, final Controller controller) throws IOException {
    FXMLLoader fxmlLoader = new FXMLLoader(MainClass.class.getResource(fxmlFile));
    if (controller != null) {
        fxmlLoader.setController(controller);
    }
    Parent root = (Parent) fxmlLoader.load();
    Scene scene = new Scene(root);
    scene.getStylesheets().add(CSS);
    return new SceneData(scene, controller);
}
相关问题