2017-03-19 2 views
1

Existe-t-il une méthode pratique pour surveiller l'état de l'élément de la feuille de propriétés? Comme le champ de texte se concentrer, le changement de statut booléen, etcJavaFX/Controlsfx - Comment surveiller la modification d'un élément dans une PropertySheet?

J'ai regardé le javadoc, n'en ai pas trouvé un.

Et il y a un issue ici, mais la solution semble laisser l'éditeur savoir le changement d'une propriété.

Ce que je veux est juste dans le contraire, surveiller l'éditeur.

Quelqu'un peut-il aider?

Répondre

1

De PropertySheet:

/** 
* Sets a new editor factory used by the PropertySheet to determine which 
* {@link PropertyEditor} to use for a given {@link Item}. 
* @param factory 
*/ 
public final void setPropertyEditorFactory(Callback<Item, PropertyEditor<?>> factory) { 
    propertyEditorFactory.set(factory == null? new DefaultPropertyEditorFactory(): factory); 
} 

Si vous créez un rappel à un PropertyEditor vous pouvez ajouter des écouteurs à l'éditeur.

Par exemple:

SimpleObjectProperty<Callback<PropertySheet.Item, PropertyEditor<?>>> propertyEditorFactory = new SimpleObjectProperty<>(this, "propertyEditor", new DefaultPropertyEditorFactory()); 
    projectSheet.setPropertyEditorFactory(getItemPropertyEditorCallback(propertyEditorFactory)); 



private Callback<PropertySheet.Item, PropertyEditor<?>> getItemPropertyEditorCallback(SimpleObjectProperty<Callback<PropertySheet.Item, PropertyEditor<?>>> propertyEditorFactory) { 
    return param -> { 
     PropertyEditor<?> editor = propertyEditorFactory.get().call(param); 

     //Add listeners to editor 
     editor.getEditor().focusedProperty().addListener((observable, oldValue, newValue) -> System.out.println(newValue)); 

     return editor; 
    }; 
} 
+0

Merci. J'ai testé le code d'exemple, mais ne fonctionne pas pour moi. Je ne comprends pas le PropertyItemBase, il ne peut pas être un PropertySheet.Item, non? Parce qu'il n'y a pas une méthode setEditor() dans ses méthodes. Alors c'est quoi? @bonfatti – user6839234

+0

Je voulais supprimer la partie itemBase du code avant de coller mon commentaire, désolé à ce sujet. PropertyItemBase est une implémentation de PropertySheet.Item contenant une instance de l'éditeur, plus getter et setter. Je vais modifier ma réponse pour supprimer l'itemBase. – bonfatti

+0

Merci beaucoup! – user6839234