我正在制作一个JavaFX应用程序,其中的内容是从JXML加载的。现在,我正在尝试动态更改组件的语言,而无需重新加载整个场景。我已经看到this answer创建了一个可观察的ResourceFactory,这正是我在寻找的东西,但是它依赖于具有可用控件的键来从资源包中查找国际化文本。
如何从使用FXMLLoader.load(...?从FXML文件加载的Button或Label中获取原始密钥?当我查看控件的属性时,我可以看到text属性我可以在屏幕上看到文本,但是我要用的是用于查找该文本的键-例如'%homepage.enterbuttonlabel'而不是'Enter'
我已经跟踪了FXMLLoader.load方法,并在FXMLLoader $ element:235
中找到了此方法。public void processInstancePropertyAttributes() throws IOException {
if (instancePropertyAttributes.size() > 0) {
for (Attribute attribute : instancePropertyAttributes) {
processPropertyAttribute(attribute);
}
}
}
在这一点上,instancePropertyAttributes包含元素“ text”,该元素具有我要使用的“%homepage.enterbuttonlabel”,但是似乎在处理该值时将其替换为国际化的文本。
FXMLLoader $ element是FXMLLoader的私有内部类,因此在处理擦除它之前,我看不到如何重写任何可以将值存储在新属性中的内容。缺少复制/重新实现FXMLLoader类,有什么办法可以访问该值?