2014-01-31 2 views
0

장면에서 내용을 추출하고 창에 넣으려고합니다. 문제는 장면에서 루트 구성 요소를 가져 와서 창에 추가하면 아무 것도 표시되지 않는다는 것입니다.장면에서 내용 추출

참고 : 장면이 스테이지 나 다른 구성 요소에 추가되지 않습니다.

이 JanelaPrincipalController이 컨트롤러를 확장

공용 클래스가 Initializable {

@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. 
} 

}

+0

당신은 런타임 오류를받을 수 있나요? "이 노드는 이미 장면 그래프의 일부입니다"라는 라인을 따라 뭔가 기대됩니다. –

+0

@ceklock scene과 stackpane 모두 같은 파일에 있습니까? 또는 그것의 다른 컨트롤러 파일에? –

+0

여기에 대한 간단한 예를 들어 정확한 사례를 게시 해 주시면 도와 드릴 수 있습니다. – Sebastian

답변

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

같은 노드를 구현 (에 :

다음은 내 (지저분한, 지금은) 코드 이 경우 부모)는 트위이스로 표시되지 않으므로 장면이 표시되면 루트 fr을 제거해야합니다 그리고 장면을 스택 패널에 추가합니다.

+0

문제가 발견되었지만 루트 노드가 장면에 추가되었습니다. 장면이 표시되는지 여부는 중요하지 않습니다. 노드가 장면에 링크되어 있으면 다른 위치에 표시 할 수 없습니다. – ceklock