What happens when I call FXMLLoader#load() in JavaFX?
Suppose the FXML controller extends a class that has a constructor. Will there be assurance that the constructor will be called? And if not, how will a new instance of the object be created? For example, in the code below, will the TextField() constructor be called?
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.Initializable;
import javafx.scene.control.TextField;
public class FXMLController extends TextField implements Initializable {
@Override
public void initialize(URL url, ResourceBundle rb) {
}
}
I already tried searching this one out but there seems to be no documentation about it aside from "Loads an object hierarchy from a FXML document." from http://docs.oracle.com/javafx/2/api/javafx/fxml/FXMLLoader.html
Your answers will be appreciated. Thanks a lot!
To answer your question "what does a FXMLLoader do exactly when building a controller?":
first it will try to get a controller instance:
after getting the controller instance, it will do the following with it:
I'm not entirely sure what you are trying to do but normally the controller should not extend a textfield.
That aside, this is basic java stuff: textfield has an empty constructor, your controller has none so java will (by default) call the empty constructor available in TextField. The TextField constructor will by default (even if it's not in the code) call the constructor of the class it extends and so on. There is no way to construct an object in java without a constructor being called.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With