在我的Guice模块中,我想关联FXML文件和它们的控制器,目前它看起来像这样:
public class GuiceModule extends AbstractModule
{
@Override
protected void configure()
{
// associate controllers and fxml files
bind(MainController.class).toInstance((MainController)loadController("/main.fxml"));
bind(SubController.class).toInstance((SubController)loadController("/content.fxml"));
}
protected Object loadController(String url)
{
InputStream fxmlStream = null;
try
{
fxmlStream = getClass().getResourceAsStream(url);
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource(url));
loader.setControllerFactory(new Callback
但是在loadController(String url)方法中,我遇到了该行的问题:
return injector.getInstance(clazz); // PROBLEM: no access to the injector here
如何从Guice模块中访问Guice的getInstance方法?那可能是同等的吗?
最佳答案
我是fx-guice的作者,fx-guice是一个开源库,可用于在JavaFX应用程序中使用Guice.该库使用Apache License v2许可,可通过中央Maven repository获得.
即使它可能无法解答您的确切问题,我建议您查看我的项目,其中包含了很多示例:
项目主页:→http://github.com/cathive/fx-guice/
我的框架的主要思想是:
您可以扩展“com.cathive.fx.GuiceApplication”而不是扩展“javafx.application.Application”.然后,您可以在任何地方@Inject实现“GuiceFXMLLoader”,并可以使用这些特殊的FXMLLoader实例来加载您的UI定义.在您的FXML控制器类中,您可以根据需要混合@Inject和@FXML annoations.
→http://bit.ly/139fKQV
我的框架还提供了一系列关于“Guicified”JavaFX组件的功能,它们将Java类和单个FXML文件绑定在一起(使用特殊注释:“@ FXMLComponent”).我写了一个简短的“计算器”示例,其源可以从Github页面获得(见上文).代码的相关部分可以在这里找到:
CalculatorAppPane.java:→http://bit.ly/10YMVoM
CalculatorAppPane.fxml:→http://bit.ly/13loYv8
希望有所帮助.