2015-01-05 3 views
2

TabPane에 정적 탭이 몇 개 포함 된 JavaFX 앱을 빌드 중이며 필요에 따라 구성에 따라 다른 내용의 탭이 동적으로 추가됩니다.Scene Builder로 설계된 동적으로로드하는 탭

각 동적 탭은 서로 다를 수 있으므로이 동적 탭 중 어느 것을 인스턴스화/추가 할 것인지 선택적으로 선택해야합니다.

저는 Scene Builder를 사용하여 대부분의 앱에 대한 GUI를 디자인하고 있습니다. 지금까지 정적 탭에 대한 모든 것이 잘 작동합니다. 여기 내 도전이 시작됩니다.

씬 빌더를 사용하여 동적 탭을 디자인하고 런타임에 원하는대로 탭 구성을 지정하기 만하면 어떻게됩니까?

감사 알

답변

3

나는 자신의 FXML 파일에 각 탭의 내용을 넣어 것입니다. <fx:include>을 사용하여 항상 "기본"FXML 파일에로드 된 것을로드 할 수 있습니다. 그런 다음 주 fxml에 대한 컨트롤러의 initialize() 메소드에서 구성을 읽고 필요한 다른 fxml 파일을로드하십시오.

뭔가 Main.fxml

같은

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.layout.BorderPane?> 
<?import javafx.scene.control.TabPane?> 

<BorderPane xmlns:fx="http://javafx.com/fxml" fx:controller="MainController"> 
    <center> 
     <TabPane fx:id="tabPane"> 
      <Tab> 
       <fx:include source="StaticContent1.fxml"/> 
      </Tab> 
      <Tab> 
       <fx:include source="StaticContent2.fxml"/> 
      </Tab> 
      <!-- etc --> 
     </TabPane> 
    </center> 
</BorderPane> 

MainController.java

public class MainController { 

    @FXML 
    private TabPane tabPane ; 

    public void initialize() { 
     Configuration config = readConfiguration(); // (pseudocode) 
     if (config.shouldLoadTab1()) { 
      FXMLLoader loader = new FXMLLoader(getClass().getResource("DynamicTab1.fxml")); 
      Tab tab = new Tab("Some title"); 
      tab.setContent(loader.load()); 
      tabPane.getTabs().add(tab); 
     } 
     // etc 
    } 
} 

각 탭에 대한 FXML 파일 (여부 ""정적 "또는 동적 ") 탭의 내용 만 포함합니다 (이미 정의 된 탭 창이 아님). 기본 fxml 파일에있는 ed 또는 탭 (기본 설정 방법)은 주 FXML 또는 컨트롤러에서 정의됩니다. 그래서 당신은 확실히 당신이 VBox의 장소에서 원하는 레이아웃 창을 사용할 수 있습니다

StaticContent1.fxml

<?xml version=1.0 encoding="UTF-8"?> 

<?import javafx.scene.layout.VBox?> 

<VBox xmlns:fx="http://javafx.com.fxml"> 
    <!-- nodes... --> 
</VBox> 

같은 것을 할 것입니다.

+0

그래서 무엇이 문제입니까? –

+0

내 게시물이 분명하지 않을 수 있습니다. 나는 그것을 편집했다. 런타임에 동적으로 추가 할 탭과 컨트롤러를 이미 만들었습니다. 나의 도전은 시작할 때 내 FXML에서 정적 탭 3 개를 호출하는 것만을 인스턴스화하는 것이다. 이미 FXML에는 SceneBuilder로 디자인 한 'n'개의 추가 탭이 있습니다. 시작시 생성하고 싶지 않습니다. 위에서 언급했듯이, 프로그램이 실행되고 있고 구성 파일을 구문 분석 할 때 기존의 TabPane이라는 alredy에 표시 할 동적 탭 중 하나를 선택하려고합니다. 희망이 명확하게. –

+0

죄송합니다. 이전 댓글을 말끔하게 만들었습니다. –

관련 문제