是否有一种使用惯例by fxml()
为 TornadoFX 使用的FXML文件提供路径的方法?
通常, TornadoFX 通常会尝试在src/main/resources
中定位FXML资源,但是,我们的应用程序很大,这现在可能是最好的主意。在我们的情况下,我们希望将文件维护在一个子目录中,即src/main/resources/fxml
。
我们想在应用程序启动期间进行设置。这可能吗?
答案 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的最新快照版本进行试用。