TornadoFX中FXML文件的前缀路径

时间:2019-01-06 18:00:46

标签: javafx kotlin tornadofx

是否有一种使用惯例by fxml() TornadoFX 使用的FXML文件提供路径的方法?

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

我们想在应用程序启动期间进行设置。这可能吗?

1 个答案:

答案 0 :(得分:1)

我已经在框架中添加了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" }
}

例如,您可以在app.init()中覆盖它,例如:

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的最新快照版本进行试用。