JavaFX 8, ListView avec des Cases à cocher
Je veux créer une simple Liste. J'ai compris que je peux utiliser la méthode setCellFactory() mais je ne comprends pas comment les utiliser correctement. Pour l'instant j'ai:
myListView.setCellFactory(CheckBoxListCell.forListView(property));
"La propriété" être quelque chose qui s'appelle un Rappel--je pense Rappel a quelque chose à voir avec bidirectionnel de délimitation. J'ai donc créé un
property = new CallBack<String, ObservableValue<Boolean>>();
Mon compilateur me dit que si je créer un nouveau Rappel, j'ai besoin de remplacer l'appel de la méthode.
Et là je suis coincé. Que dois-je faire avec cet appel de méthode? Je peux la mettre en œuvre, mais que dois-je de retour, ou l'utiliser? Je veux sur ma case sur toute listItem et d'afficher "salut" dans la console.
OriginalL'auteur jan | 2015-03-03
Vous devez vous connecter pour publier un commentaire.
Si vous avez un
ListView<String>
, puis chaque élément de laListView
est unString
, et laCheckBoxListCell.forListView(...)
méthode attend unCallback<String, ObservableValue<Boolean>>
.Dans le pré-Java 8 façon de penser des choses, un
Rappel<String, ObservableValue<Boolean>>
est une interface qui définit une seule méthode,De sorte que vous besoin de quelque chose qui implémente cette interface, et vous passez un objet de ce type.
La la documentation vous indique également comment ce rappel est utilisé:
(Puisque vous avez un
ListView<String>
, iciT
estString
.) Ainsi, pour chaque élément dans la vue liste (chaque élément est unString
), le rappel est utilisé pour déterminer uneObservableValue<Boolean>
qui est bidirectionnelle lié à l'état de la case à cocher. I. e. si la case est cochée, cette propriété est définie àtrue
, et si rien n'est fait, il est fixé àfalse
. A l'inverse, si la propriété est définie àtrue
(oufalse
) par programmation, la case à cocher est activée (ou désactivée).Le cas d'utilisation typique ici, c'est que le type de l'élément dans le
ListView
aurait unBooleanProperty
dans le cadre de son état. Donc, vous l'utilisez en général avec un certain type de classe personnalisée pour représenter vos données, comme suit, avec l'intérieurItem
classe:Si vous avez réellement avoir un
ListView<String>
, c'est pas vraiment clair ce que la propriété que vous définissez en cliquant sur la case à cocher serait. Mais il n'y a rien pour vous empêcher de vous en créer un dans le rappel juste pour le but de la liaison à la case à cocher est sélectionnée etat:Avis que, dans ce cas, le
BooleanProperty
s sont susceptibles d'être créés et mis au rebut de souvent. Ce n'est probablement pas un problème dans la pratique, mais cela veut dire que la première version, avec le modèle dédié classe, ne peuvent faire mieux.Dans Java 8, vous pouvez simplifier le code. Parce que le
Callback
interface comporte une seule méthode abstraite (un Interface Fonctionnelle), vous pouvez penser à unCallback<Item, ObservableValue<Boolean>>
comme une fonction qui prend unItem
et génère unObservableValue<Boolean>
. Donc la cellule de l'usine dans le premier exemple peut être écrite avec un expression lambda:ou, encore plus, de façon succincte, à l'aide de méthode de références:
OriginalL'auteur James_D
Merci!
Cela m'aide à résoudre mon problème.
OriginalL'auteur
Merci pour les réponses précédentes.
Je m'ennuie de l'information que setCellValueFactory n'est pas nécessaire, mais la valeur attribuée doit également être fait dans setCellFactory. Voici ma démarche (bien copié à partir de la solution précédente).
OriginalL'auteur karnbo