How does FXMLLoader load the FXML's controller?

血红的双手。 提交于 2019-12-01 04:17:37

To answer your question "what does a FXMLLoader do exactly when building a controller?":

first it will try to get a controller instance:

  • if there is already a controller instance set on the FXMLLoader, it will use this instance.
  • if there is no controller factory set on the FXMLLoader, it tries to call a zero-argument-constructor of the class per reflection. If this fails, an InstantiationException is thrown.
  • if there is a controller factory set, it will call this factory to create a new controller instance.

after getting the controller instance, it will do the following with it:

  • if this class implements Initializable, it calls public void initialize(URL url, ResourceBundle resourceBundle). If not, it looks if there is a method called initialize with zero arguments and calls it via reflection. If not, it does nothing.

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!