在我的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方法?那可能是同等的吗?
即使它可能无法解答您的确切问题,我建议您查看我的项目,其中包含了很多示例:
项目主页:→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 举报,一经查实,本站将立刻删除。