0

Je travaille avec le controlsfx plug-in et je suis tombé sur une mise en œuvre du StringProperty qui est du type: SimpleLocalizedStringProperty et est importé de:
import impl.org.controlsfx.i18n.SimpleLocalizedStringProperty; Quelqu'un at-il travaillé avec cette propriété; en fonction de son nom, il devrait faciliter l'utilisation avec un ResourceBundle Je suppose. Mais il n'y a pas de tutoriels ni d'informations détaillées sur la façon de le lier avec ResourceBundles basé sur les paramètres régionaux.Howto utiliser SimpleLocalizedStringProperty (controlsfx-plugin) avec ResourceBundle dans JavaFX

Il serait grandement apprécié que quelqu'un ici puisse partager avec nous son expérience avec cette propriété.

Répondre

1

Cette classe est supposée charger les piqûres avec un motif spécifique à partir d'un ResourceBundle et conserver les autres chaînes telles qu'elles sont. Si une chaîne commence par @@, le reste de la chaîne est utilisé comme clé pour controlsfx.properties properties file.

Exemple:

@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(); 
} 

Ma recommandation cependant: Ne pas utiliser la classe à ce moment !!! (Juillet 2016)

Il contient quelques défauts fondamentaux:

  • La méthode getValue est écrasée pour renvoyer le résultat localisé. De nombreuses méthodes, notamment getValue, utilisent cependant la méthode get, ce qui peut entraîner un comportement inattendu. Il suffit de remplacer

    btn.textProperty().bind(prop); 
    

    avec

    btn.textProperty().bind(Bindings.when(new SimpleBooleanProperty(true)).then(prop).otherwise((String) null)) 
    

    dans l'exemple ci-dessus et la clé de la propriété nous utilisé au lieu de la valeur localisée.

    get() et getValue() sont censés retourner la même valeur, ce que cette classe ne fait pas et viole donc le Liskov Substitution Principle.

  • La valeur peut changer sans qu'une mise à jour ne soit déclenchée. En changeant le Locale en utilisant par ex. impl.org.controlsfx.i18n.Localization.setLocale(Locale.FRANCE); (en supposant que les paramètres régionaux autres que FRANCE avant la modification) modifient la valeur renvoyée par getValue() sans notifier les écouteurs.

+0

Salut Fabian, j'apprécie vraiment que vous ayez fait beaucoup d'efforts et beaucoup de votre temps pour écrire cette explication très complète et détaillée. Malheureusement 'SimpleLocalizedStringProperty' n'a pas encore mûri, je vous demande si vous pouvez recommander des frameworks i18n ou des approches de codage pour que StringProperty charge son contenu depuis ResourceBundle qui a été précédemment injecté via' FXMLLoader loader = new FXMLLoader (URL, ResourceBundle) '? Avec SceneBuilder on peut charger n'importe quel textnode à partir de ResourceBundle avec 'text ="% keyValue "', y a-t-il quelque chose de similaire à ceci pour StringProperties? – Chiggiddi