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