Javafx TornadoFX中FXML文件的前缀路径

Javafx TornadoFX中FXML文件的前缀路径,javafx,kotlin,tornadofx,Javafx,Kotlin,Tornadofx,有没有一种方法可以使用FXML()的约定为TornadFX使用的FXML文件提供路径 通常,TornadFX会尝试在src/main/resources中定位FXML资源,但是,我们的应用程序很大,这可能是最好的主意。在本例中,我们希望在子目录中维护文件,即src/main/resources/fxml 我们希望在应用程序启动时设置它。这可能吗?我在框架中添加了一个FXML定位器函数,以便您可以覆盖它来更改资源位置。声明和默认实现如下所示: var fxmlLocator: (component

有没有一种方法可以使用FXML()的约定为TornadFX使用的FXML文件提供路径

通常,TornadFX会尝试在
src/main/resources
中定位FXML资源,但是,我们的应用程序很大,这可能是最好的主意。在本例中,我们希望在子目录中维护文件,即
src/main/resources/fxml


我们希望在应用程序启动时设置它。这可能吗?

我在框架中添加了一个FXML定位器函数,以便您可以覆盖它来更改资源位置。声明和默认实现如下所示:

var fxmlLocator: (component: UIComponent, location: String?) -> URL = { component, location ->
    val targetLocation = location ?: component.javaClass.simpleName + ".fxml"
    requireNotNull(component.resources.url(targetLocation)) { "FXML not found for ${component.javaClass} in $targetLocation" }
}
FX.fxmlLocator = { component, _ ->
    val targetLocation = "/fxml/${component.javaClass.simpleName}.fxml"
    requireNotNull(component.resources.url(targetLocation)) { "FXML not found for ${component.javaClass} in $targetLocation" }
}
例如,您可以在
app.init()
中覆盖此选项,如下所示:

var fxmlLocator: (component: UIComponent, location: String?) -> URL = { component, location ->
    val targetLocation = location ?: component.javaClass.simpleName + ".fxml"
    requireNotNull(component.resources.url(targetLocation)) { "FXML not found for ${component.javaClass} in $targetLocation" }
}
FX.fxmlLocator = { component, _ ->
    val targetLocation = "/fxml/${component.javaClass.simpleName}.fxml"
    requireNotNull(component.resources.url(targetLocation)) { "FXML not found for ${component.javaClass} in $targetLocation" }
}
但是,如果您这样做,您必须注意类名,因为不同包中的相同类名将在/fxml中查找相同的资源。或者,更改实现以观察包名称


我现在正在提交该功能,明天您可以使用sonatype的最新快照版本进行试用。

Delegate,一个字。非常感谢。