我正在使用 controlsfx 插件,我遇到了StringProperty的一个实现,其类型为:SimpleLocalizedStringProperty
,并从以下位置导入:
import impl.org.controlsfx.i18n.SimpleLocalizedStringProperty;
有没有人与这家酒店合作过;根据它的名称,我应该使用 ResourceBundle 来简化使用。但是没有关于如何将它与基于语言环境的ResourceBundles绑定的教程或详细信息。
如果有人能够与我们分享他/她对此酒店的体验,我们将不胜感激。
答案 0 :(得分:1)
这个类应该从ResourceBundle
加载具有特定模式的stings,并保持其他字符串不变。如果字符串以@@
开头,则字符串的其余部分将用作controlsfx.properties
properties file的键。
示例:
@Override
public void start(Stage primaryStage) {
SimpleLocalizedStringProperty prop = new SimpleLocalizedStringProperty("Hello World");
Button btn = new Button();
btn.textProperty().bind(prop);
btn.setOnAction((ActionEvent event) -> {
prop.set("@@font.dlg.title");
});
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 500, 300);
primaryStage.setScene(scene);
primaryStage.show();
}
我的建议是:此时不要使用课程!!! (2016年7月)
它包含一些基本缺陷:
覆盖getValue
方法以返回本地化结果。然而,许多方法(包括getValue
)使用get
方法,这可能会导致意外行为。只需替换
btn.textProperty().bind(prop);
与
btn.textProperty().bind(Bindings.when(new SimpleBooleanProperty(true)).then(prop).otherwise((String) null))
在上面的示例中,我们使用属性的键而不是本地化的值。
get()
和getValue()
应返回相同的值,此类不会执行该操作,因此会违反Liskov Substitution Principle。
如果没有触发更新,则值可能会发生变化。通过使用例如Locale
进行更改impl.org.controlsfx.i18n.Localization.setLocale(Locale.FRANCE);
(假设更改前的FRANCE
以外的区域设置)将更改getValue()
返回的值,而不通知听众。