griffon javafx-groovy and fxml?



我尝试了github griffon-master中给出的样本,也尝试了指南的样本。

我想使用 javafx 和 groovy。

我想使用 fxml - 想到一个场景:fxml 设置舞台,对于更改,使用 groovy (设置调整)

这似乎是不可能的。我可以使用("让它运行"):javafx-java,读取一个fxml(使用loadFromFXML),并且绑定正在工作。如果使用javafx-groovy,我可以读取fxml,但是使用javafx类加载器(加载),并且绑定不起作用(或者看起来是这样)。

目前是否

无法使用javafx-groovy和read-in fxml(通过loadfromfxml)?

你能发布一些示例代码吗?下面是一个利用 GroovyFX 形式的fxml节点的示例

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)
    }
}

这是可以做到的。诀窍是使您的控制器操作遵守一组严格的规则。TLDR是为了确保它们返回无效。

好:

    def void save() {

坏:

    def save() {

原因在Griffon框架用于创建其行动目标列表的反射分析中找到。此列表在 DefaultGriffonControllerClass.getActionNames() 中生成,这需要:

行动受以下规则的约束,以便被视为此类规则:

  • 必须具有公共 (Java) 或默认 (Groovy) 可见性修饰符。
  • 名称与事件处理程序不匹配,即它不以 on 开头。
  • 如果是方法,则必须通过{code GriffonClassUtils.isPlainMethod()}
  • 如果是方法,则必须将 void 作为返回类型。
  • 值必须是闭包(包括柯里方法指针),如果它是一个属性。

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;
}

最新更新