3

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

我想使用 javafx 和 groovy。

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

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

目前是否不可能使用 javafx-groovy 和读入 fxml(通过 loadfromfxml)?

4

2 回答 2

1

你能发布一些示例代码吗?这是一个使用fxmlGroovyFX 节点形式的示例

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)
    }
}
于 2015-03-14T18:22:33.750 回答
0

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

好的:

    def void save() {

坏的:

    def save() {

原因可以在 Griffon 框架用来创建其行动目标列表的反思分析中找到。这个列表是在 中生成的DefaultGriffonControllerClass.getActionNames(),它要求:

行动须遵守以下规则才能被视为:

  • 必须具有公共 (Java) 或默认 (Groovy) 可见性修饰符。
  • name 与事件处理程序不匹配,即它不以 on 开头。
  • {code GriffonClassUtils.isPlainMethod()}如果它是一种方法,则必须通过。
  • 如果它是一种方法,则必须将 void 作为返回类型。
  • 如果它是一个属性,则 value 必须是一个闭包(包括 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;
}
于 2016-03-21T09:30:30.457 回答