2014-09-15 4 views
3

Je souhaite transformer le jeu de clés d'ObservableMap en un ObservableSet en lecture seule. Je ne veux pas copier la valeur, toute modification de ObservableMap doit affecter le keySet Observable. Si je lie un autre ensemble au contenu du jeu de clés observables, son contenu est automatiquement mis à jour.JavaFX: ObsevableMap keySet en tant que ObservableSet

Voici ce que j'aimerais écrire.

ObservableMap<String, Object> map = FXCollections.observableHashMap(); 
ObservableSet<String> keySet = FXCollections.observableKeySet(map); 
Set<String> boundSet = new HashSet<String>(); 
Bindings.bindContent(boundSet, keySet); 
map.put("v", new Object()); 
assert boundSet.contains("v"); 

Y a-t-il cette fonctionnalité dans le JavaFX SDK?

Répondre

1

La fonctionnalité que vous demandez n'a pas besoin de ObservableSet spéciale. Il fait déjà partie du contrat d'interface Map:

ObservableMap<String, Object> map = FXCollections.observableHashMap(); 
Set<String> keySet = map.keySet(); 
map.put("v", new Object()); 
assert keySet.contains("v"); 

Un jeu de clés de Map reflète toujours les modifications apportées à la carte de support.

http://docs.oracle.com/javase/8/docs/api/java/util/Map.html#keySet--

Renvoie une vue Set des clés contenues dans cette carte. L'ensemble est sauvegardé par la carte, donc les changements à la carte sont reflétés dans l'ensemble, et vice-versa.

+0

Merci @Holger. Je suis désolé ma question n'était pas assez précise. J'ai vraiment besoin d'un 'ObservableSet' j'ai mis à jour ma réponse. – gontard

+0

@gontard: Il n'est toujours pas clair pourquoi vous avez besoin d'un 'ObservableSet'. Votre 'boundSet' n'offre aucune fonctionnalité supplémentaire par rapport à' keySet' dans ma réponse. Devrais-je renommer 'keySet' en' boundSet' pour que vous vous sentiez plus à l'aise? – Holger

+0

Non merci, je me sens plutôt bien avec 'keySet'. – gontard