是否可以设置JavaFX如何从CSS加载图像?如果我可以将其委托给某个实用程序类。
在Swing中我有一个ImageStore实用程序类,它加载了所有组件所需的图像。 ImageStore从给定的URL中检索图像并将其缓存到磁盘以供以后检索。它还在内存缓存中用于运行应用程序,以避免在每次检索时触摸磁盘。这样,如果100个组件想要相同的图像,则图像仅被提取1次,而不是100次。
我现在使用CSS进行样式设置是一个两难选择
-fx-background-image:url('/images/single-search.png')
如何将此加载委托给ImageStore?
JavaFX如何处理CSS中定义的图像加载?
如果JavaFX CSS自己进行一些缓存,这只会解决一个问题。它不会多次获取相同的图像。但是,我的ImageStore会将所有图像保存到文件缓存中,以便下次启动应用程序时它们也可用。
答案 0 :(得分:0)
JavaFX使用它自己的缓存类:
com.sun.javafx.css.StyleManager
包含用于背景图片css属性的转换器使用的Image getCachedImage(String url)
方法。 (请注意,此类不是公共API的一部分。)此类似乎不会将图像写入文件,也没有办法以干净的方式替换图像的加载方式(即不使用反射或类似方法)意思是),但保留对记忆中使用的图像的引用......
当然,您可以使用自己的缓存替换CssMetaData
方法返回的List
getCssMetaData()
对象CssMetaData
和Region
对象,但是这需要扩展您想要使用缓存的Region
的每个子类,并使用这些类而不是标准 val props: Properties = System.getProperties
val propsScala: mutable.Map[String, String] = props.asScala
val padding = " "
var lenght = 0
for ((k, v) <- propsScala) if (k.length > lenght) lenght = k.length else lenght
for ((k, v) <- propsScala) println(k + padding * (lenght - k.length - 1) + "| " + v)
...