/ / Verwenden von zwei Controller-Klassen für dieselbe XML-Datei - Java, Model-View-Controller, Javafx

Verwenden von zwei Controller-Klassen für die gleiche fxml-Datei - Java, Model-View-Controller, Javafx

Bisher habe ich den Controller immer von der Seite aus eingerichtet fxml Datei so im root-Element:

fx:controller = "control.MainController"

Ich habe ein Fenster mit 2 RegisterkartenDamit mein Projekt in Ordnung bleibt und einfach zu lesen und zu warten ist, möchte ich den Controller-Code in zwei Teile unterteilen FirstTabController und SecondTabController. Wie es geht?

Kann ich benutzen zwei verschiedene Dateien als Controller-Klassen desselben fxml Datei?

Antworten:

1 für die Antwort № 1

Schaue auf die JavaFX TabPane - Ein Controller für jede Registerkarte - du solltest benutzen fx:include Etikett.

Main.java (vorausgesetzt, alle Dateien befinden sich in der sample Paket)

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;

public class Main extends Application {

public void start(Stage stage) {
Parent root = null;

try {
root = FXMLLoader.load(getClass().getResource("sample.fxml"));
} catch (IOException e) {
e.printStackTrace();
}

Scene scene = new Scene(root, 300, 275);
stage.setTitle("FXML Welcome");
stage.setScene(scene);
stage.show();
}

public static void main(String[] args) {
launch();
}
}

sample.fxml

<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.Tab?>

<TabPane xmlns:fx="http://javafx.com/fxml">
<Tab text="Tab 1">
<content>
<fx:include source="tab1.fxml"/>
</content>
</Tab>
<Tab text="Tab 2">
<content>
<fx:include source="tab2.fxml"/>
</content>
</Tab>
</TabPane>

tab1.fxml

<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.control.Label?>
<StackPane xmlns:fx="http://javafx.com/fxml" fx:controller="sample.TabOneController">
<Label text="Tab 1"/>
</StackPane>

tab2.fxml

<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.control.Label?>
<StackPane xmlns:fx="http://javafx.com/fxml" fx:controller="sample.TabTwoController">
<Label text="Tab 2"/>
</StackPane>

FXML-Dateien, die mit dem hinzugefügt wurden fx:include Tags sind separate Dateien, die separate Controller haben können.