2015-03-13 230 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; 
}