我正在寻找一种注册到控制器上的 FXML 组件注入的方法。所以我会有这样的方法
无效 afterComponenetInjection();
一旦注入 FXML 组件,就会触发。
没有这样的直接机制。但是,所有注入都保证在initialize()调用控制器的方法之前完成,因此您可以将此类功能放在该方法中。
或者,如果您希望它位于控制器本身的外部,请从FXMLLoader; 中检索控制器。一旦load()方法返回,注入就已经完成(并且initialize()方法将完成),因此您可以在调用load().
我想第三个选项:在控制器中定义一个 BooleanProperty,并在initialize()方法的开头将其设置为 true 。然后使用该属性注册一个侦听器:同样,由于注入在initialize()调用之前完成,因此将在注入完成时调用您的侦听器。就像是:
public class MyController {
@FXML
private Node node1 ;
@FXML
private Node node2 ;
private final ReadOnlyBooleanWrapper injected = new ReadOnlyBooleanWrapper(this, "injected", false);
public boolean isInjected() {
return injected.get();
}
public ReadOnlyBooleanProperty injectedProperty() {
return injected.getReadOnlyProperty();
}
public void initialize() {
injected.set(true);
// other initialization...
}
}
// elsewhere...
FXMLLoader loader = new FXMLLoader(getClass().getResource(...));
MyController controller = new MyController();
loader.setController(controller);
controller.injectedProperty().addListener( /* will be invoked after injection....*/ );
Parent root = (Parent) loader.load();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
535 次 |
| 最近记录: |