2015-03-13 122 views
3

我尝试了github griffon-master中给出的示例,我也尝试了指南的示例。griffon javafx-groovy和fxml?

我想用javafx和groovy。

我想用FXML - 思想的一个场景为:FXML设置阶段,更改,使用常规(设置调整)

这似乎是不可能的。我可以使用(“让它运行”):javafx-java,读取一个fxml(带有loadFromFXML),并且绑定正在工作。如果使用javafx-groovy,我可以读取一个fxml,但使用javafx-class Loader(load),并且绑定不起作用(或者看起来如此)。

使用javafx-groovy和读入fxml(通过loadfromfxml)在这个时候不可能吗?

回答

1

你可以发布一些示例代码?下面是使用fxml节点格式的一个示例GroovyFX

package org.example 

import griffon.core.artifact.GriffonView 
import griffon.metadata.ArtifactProviderFor 
import javafx.scene.control.Tab 
import org.codehaus.griffon.runtime.javafx.artifact.AbstractJavaFXGriffonView 

@ArtifactProviderFor(GriffonView) 
class Tab4View extends AbstractJavaFXGriffonView { 
    FactoryBuilderSupport builder 
    SampleController controller 
    SampleModel model 
    private AppView parentView 

    void initUI() { 
     builder.with { 
      content = builder.fxml(resource('/org/example/tab4.fxml')) { 
       inputLabel.text = application.messageSource.getMessage('name.label') 
       bean(input, text: bind(model.inputProperty())) 
       bean(output, text: bind(model.outputProperty())) 
      } 
     } 

     connectActions(builder.content, controller) 

     Tab tab = new Tab('Hybrid') 
     tab.content = builder.content 
     parentView.tabPane.tabs.add(tab) 
    } 
} 
+0

我们只是把一个新的教程,说明不同的选项,构建JavaFX意见http://new.griffon-framework.org/tutorials/4_javafx_views html的 – aalmiray 2015-03-15 20:15:16

0

这可以完成。诀窍是让你的控制器操作符合一套严格的规则。 tldr是要确保它们返回无效。

好:

def void save() { 

坏:

def save() { 

原因是在格里芬框架用于创建它的行动目标列表中的反射分析发现。在DefaultGriffonControllerClass.getActionNames()生成这个列表,它要求:

操作受到以下规则才能被认为是这样的:

  • 必须有公共(爪哇)或默认(Groovy中)的知名度修改。
  • 名称与事件处理程序不匹配,即它不以开头开头。
  • 必须通过{code GriffonClassUtils.isPlainMethod()}如果它是一种方法。
  • 如果是方法,则必须具有void作为返回类型。
  • 如果它是一个属性,则值必须是一个闭包(包括curried方法指针)。是

GriffonClassUtils.isPlainMethod()定义的标准如下:

  • isInstanceMethod(method)
  • ! isBasicMethod(method)
  • ! isGroovyInjectedMethod(method)
  • ! isThreadingMethod(method)
  • ! isArtifactMethod(method)
  • ! isMvcMethod(method)
  • ! isServiceMethod(method)
  • ! isEventPublisherMethod(method)
  • ! isObservableMethod(method)
  • ! isResourceHandlerMethod(method)
  • ! isGetterMethod(method)
  • ! isSetterMethod(method)
  • ! isContributionMethod(method)

的行动目标名称列表随后被AbstractActionManager

@Nullable 
private static Method findActionAsMethod(@Nonnull GriffonController controller, @Nonnull String actionName) { 
    for (Method method : controller.getClass().getMethods()) { 
     if (actionName.equals(method.getName()) && 
      isPublic(method.getModifiers()) && 
      !isStatic(method.getModifiers()) && 
      method.getReturnType() == Void.TYPE) { 
      return method; 
     } 
    } 
    return null; 
}