/ Ako nastaviť nakladač FXML pre vlastný gui builder - javafx

Ako nastaviť zavádzač FXML pre vlastný gui builder - javafx

Mám komponentu v súbore FXML, ktorý obsahuje riadok:

<AnchorPane xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="DataTableController">

Snažím sa načítať fxml v regulátore:

public DataTableController() throws IOException {
FXMLLoader.load(getClass().getResource("DataTable.fxml"));
}

Nemám triedy, ktoré rozširujú Žiadosť aNemám hlavnú metódu, pretože už mám okno, ktoré je spustené inou aplikáciou (vlastný tvorca scén) .Takže chcem len ukázať AnchorPane na mojom okne na komponente vlastného pohľadu. regulátor, nie je problém.Môj problém je, že neviem, ako nahrať FXML, keď nemám použiť fx: root, pretože keď som zmeniť AnchorPane na fx: root, môžem načítať FXML a nastaviť root a nastaviť ovládač pozri obsah súboru fxml na mojom okne.Avšak mám problém, že nemôžem nastaviť contoller v súbore fxml, pretože to je duplicitné nastavenie regulátora a ak nemám nastaviť regulátor vo formáte fxml súbor, potom mám chybu, pretože mám tlačidlo, ktoré potrebuje regulátor, ktorý má byť nastavený.

Takže, čo mám robiť? a kedy používame fx: root a prečo? (Som si to prečítal a skontroloval ostatné príspevky SO, ale stále to nie je jasné v mojej mysli). Akýkoľvek návrh na môj problém a jasné vysvetlenie s niektorými príkladmi o fx: root by ocenil.

Som veľmi nová pre JavaFX a SO, takže prosím opýtajte sa ma láskavo objasniť, či som nemohol vysvetliť môj problém dobre.Vďaka za akejkoľvek pomoci!

Upraviť: Zmenená trieda java ako @fabian navrhla a ktorú som sa predtým snažil a dostať túto chybu, ako som spomenul vyššie.

odpovede:

0 pre odpoveď č. 1

ak nemám nastaviť ovládač v súbore fxml, potom som dostal chybu, pretože mám tlačidlo, ktoré potrebuje regulátor byť nastavený

Nepravda. Pokiaľ nastavíte inštanciu ovládača FXMLLoader pred načítaním fxml by nemal byť problém.

Odporúčaný spôsob implementácie je nasledovný:

public class DataTableController extends AnchorPane {

public DataTableController() throws IOException {
FXMLLoader loader = new FXMLLoader(getClass().getResource("DataTable.fxml"));

// set this instance as root & controller
loader.setRoot(this);
loader.setController(this);

loader.load();
}

...

}
<fx:root xmlns="http://javafx.com/javafx/9.0.1"
xmlns:fx="http://javafx.com/fxml/1"
type="javafx.scene.layout.AnchorPane">
...
</fx:root>