In this small tutorial I'll show you how to implement an FXRoot (fx:root) construct in JavaFX and with this you can use an JavaFX scene like an Vbox or AnchorPane as the Controller.
Extend your Pane
public class FXRootExampleAnchorPane extends AnchorPane implements Initializable
First extend your custom AnchorPane and implement Initalizeable because we'll have to wait for the @FXML
items to load.
Load the FXML
public FXRootExampleAnchorPane() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass()
.getResource("/fxml/FXRootConstructExample.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch (IOException e) {
e.printStackTrace();
}
}
In our constructor we create an new FXMLLoader and give him our FXML.
Our FXML looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<fx:root maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" type="AnchorPane" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Label layoutX="213.0" layoutY="192.0" text="FXRoot Construct Example" />
<Button fx:id="someButtonBtn" layoutX="483.0" layoutY="360.0" mnemonicParsing="false" text="Some Button" />
</children>
</fx:root>
The important thing is to define an fx:root
with the type="AnchorPane
then you can load the fxml into your controller.
In our initalize()
method we initalize our someButtonBtn
with an EventHandler
.
Sometimes we need this construct to pass some references to our view.
If you have questions - comment below :)
If you press this Button it will Load Disqus-Comments. More on Disqus Privacy: Link