1 つの方法は、各タブ ページを個別の FXML ファイルにカプセル化し、独自のコントローラ クラスを関連付けることです。
次に、メイン タブ コントロールの FXML ファイルで、次のような操作を実行できます。
<TabPane fx:controller="com.foo.MainController">
<tabs>
<Tab text="Untitled Tab 1">
<content>
<fx:include fx:id="fooTabPage" source="fooTabPage.fxml"/>
</content>
</Tab>
<Tab text="Untitled Tab 2">
<content>
<fx:include fx:id="barTabPage" source="barTabPage.fxml"/>
</content>
</Tab>
</tabs>
</TabPane>
コンテンツを直接埋め込むのではなく、参照されている FXML ファイルをロードするように指示するfx:include
ディレクティブを使用していることに注意してください。FXMLLoader
ページ コンテンツに使用される個々の FXML ファイルにはすべて独自のコントローラーがあり、ロジックが適切に分離されています。
メイン コントローラーからサブページまたはサブコントローラーとやり取りする必要がある場合は、他の FXML コントロールと同様にそれらを参照して、それらを挿入することができます。
public class MainController {
// Inject tab content.
@FXML private FooTabPage fooTabPage;
// Inject controller
@FXML private FooTabController fooTabPageController;
// Inject tab content.
@FXML private BarTabPage barTabPage;
// Inject controller
@FXML private BarTabController barTabPageController;
}
多数のページ (それぞれに多数の独自のコントロールがある) がある場合、別の方法として、各タブを空のままにし、メイン ビューが読み込まれたら、関連するページをコントロールに読み込みます。
タブの変更をリッスンしてコンテンツを切り替え、関連するコードを追加して、タブ ページのコンテンツに使用されているビューをロード/アンロードする必要があります。
最初のアプローチから始めて、パフォーマンスの問題が見つかった場合はリファクタリングして 2 番目のアプローチを使用することをお勧めします。