微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 在Guice的模块配置中关联FXML和Controller

在我的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

希望有所帮助.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐