在我的 Guice 模块中,我想关联 FXML 文件及其 Controller ,目前它看起来像这样:
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<Class<?>, Object>() {
public Object call(Class<?> clazz) { // clazz because class is a reserved word
return injector.getInstance(clazz); // PROBLEM: no access to the injector here
}
});
loader.load(fxmlStream);
return loader.getController();
}
// [..] exception handling
}
}**strong text**
但是在 loadController(String url) 方法中我遇到了那一行的问题:
return injector.getInstance(clazz); // PROBLEM: no access to the injector here
如何从 Guice 模块中访问 Guice 的 getInstance 方法?那或类似的东西可能吗?
最佳答案
我是 fx-guice 的作者,这是一个开源库,可用于在您的 JavaFX 应用程序中使用 Guice。该库使用 Apache License v2 获得许可,可以通过中央 Maven repository 获得。 .
尽管它可能不能回答您的确切问题,但我建议您看一下我的项目,其中捆绑了很多示例:
项目主页:→ http://github.com/cathive/fx-guice/
我的框架的主要思想是:
您不是扩展“javafx.application.Application”,而是扩展“com.cathive.fx.GuiceApplication”。然后,您可以在任何需要的地方简单地 @Inject 实例“GuiceFXMLLoader”,并可以使用这些特殊的 FXMLLoader 实例来加载您的 UI 定义。在您的 FXML Controller 类中,您可以根据需要混合使用 @Inject 和 @FXML 注释。
→ http://bit.ly/139fKQV
我的框架还提供了一系列有关“Guicified”JavaFX 组件的功能,这些组件将一个 Java 类和一个 FXML 文件绑定(bind)在一起(使用特殊注释:“@FXMLComponent”)。我写了一个简短的“计算器”示例,其源代码可以从 Github 页面获取(见上文)。代码的相关部分可以在这里找到:
CalculatorAppPane.java:→ http://bit.ly/10YMVoM
CalculatorAppPane.fxml:→ http://bit.ly/13loYv8
希望对您有所帮助。 :-)
关于java - 在 Guice 的模块配置中关联 FXML 和 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15990777/
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm