私は、カスタム実装を使用してメソッドを実験し、FXMLLoader
使用しています。setControllerFactory
Callback<P,R>
ORACLE のドキュメントには、次のように記載されています。
実装は、指定されたタイプのコントローラーを作成しない、または作成できないことを示すために null 値を返す場合があります。この場合、デフォルトのコントローラー構築メカニズムがローダーによって採用されます。
私が達成したい結果は、依存性注入フレームワークを使用して、パラメーターを必要とするコントローラーを作成できますが、パラメーターを必要FXMLLoader
としないコントローラーをロードできるようにすることです。
したがって、ViewController
パラメーターを受け入れないクラスを使用する次の単純な FXML ファイルがある場合...
<StackPane fx:id="pane"
xmlns:fx="http://javafx.com/fxml"
fx:controller="my.package.ViewController">
</StackPane>
そして、次の単純なコントローラー ファクトリの実装を使用してFXMLLoader
、この場合はコントローラーの構築を管理することを に通知します...
loader.setControllerFactory(new Callback<Class<?>, Object>(){
@Override
public Object Call(Class<?> type) {
return null; // Let the FXMLLoader handle construction...
}
});
メソッドを呼び出した後、クラスload()
の Initialise メソッドが呼び出されることはありません (ブレークポイントでこれを確認しました)。ViewController
ViewController
クラスのインスタンスを返すようにコントローラー ファクトリの実装を変更すると、すべてが期待どおりに機能します。
混乱を解消するのを手伝ってくれる人はいますか? インターフェイスの使い方がCallback
間違っているのでしょうか、それとも ORACLE のドキュメントが間違っているのでしょうか?