TornadoFX 中 FXML 文件的前缀路径
Prefix path for FXML files in TornadoFX
有没有办法为 TornadoFX 使用的 FXML 文件提供路径,并使用其约定 by fxml()
?
通常,TornadoFX 通常会尝试在 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" }
}
您可以在 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" }
}
但是,如果您走这条路,则必须注意您的 class 名称,因为不同包中的相同 class 名称会在 /fxml 中查找相同的资源。或者,更改实现以同时观察包名称。
我现在正在提交该功能,您明天可以使用 sonatype 的最新快照版本试用它。
有没有办法为 TornadoFX 使用的 FXML 文件提供路径,并使用其约定 by fxml()
?
通常,TornadoFX 通常会尝试在 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" }
}
您可以在 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" }
}
但是,如果您走这条路,则必须注意您的 class 名称,因为不同包中的相同 class 名称会在 /fxml 中查找相同的资源。或者,更改实现以同时观察包名称。
我现在正在提交该功能,您明天可以使用 sonatype 的最新快照版本试用它。