JavaFX 8, ListView mit Checkboxen
Möchte ich das erstellen einer einfachen ListView. Ich habe herausgefunden, ich kann die Methode setCellFactory (), aber ich verstehe nicht, wie Sie richtig zu verwenden. Bisher habe ich:
myListView.setCellFactory(CheckBoxListCell.forListView(property));
Mit "Eigentum" als einen so genannten Callback-ich denke, Rückruf hat etwas zu tun mit bidirektionaler Begrenzungsrahmen. So habe ich eine
property = new CallBack<String, ObservableValue<Boolean>>();
Mein compiler sagt mir, wenn ich eine neue Callback, muss ich überschreiben Sie die Methode aufrufen.
Und hier bin ich stecken geblieben. Was mache ich mit dieser Methode nennen? Ich kann es umsetzen, aber was sollte ich zurückgeben, oder verwenden Sie es für? Ich möchte auf meiner checkbox auf jede listItem-und es-Anzeige "hi" in die Konsole.
InformationsquelleAutor jan | 2015-03-03
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie eine
ListView<String>
wird, dann hat jedes Element in derListView
ist einString
, und dieCheckBoxListCell.forListView(...)
Methode erwartet einCallback<String, ObservableValue<Boolean>>
.In der pre-Java 8 Art des Denkens der Dinge, ein
Callback<String, ObservableValue<Boolean>>
ist ein interface definiert eine einzige Methode,So Sie etwas brauchen, die die diese Schnittstelle implementiert, und übergeben Sie ein Objekt von diesem Typ.
Den Dokumentation sagt Ihnen auch, wie das callback verwendet wird:
(Da haben Sie einen
ListView<String>
hierT
istString
.) Also, für jedes element in der Liste Ansicht (jedes element ist einString
), der Rückruf wird verwendet, um zu bestimmen, eineObservableValue<Boolean>
ist bidirektional gebunden an den Status der checkbox. I. e. wenn dieses Kontrollkästchen aktiviert ist, wird diese Eigenschaft festgelegt isttrue
, und wenn nicht aktiviert " eingestellt istfalse
. Umgekehrt, wenn die Eigenschaft festgelegt isttrue
(oderfalse
) programmgesteuert die checkbox ist aktiviert (oder deaktiviert).Der typische Anwendungsfall ist hier, dass die Art von Element in der
ListView
hätteBooleanProperty
als Teil Ihres Staates. So würden Sie in der Regel verwenden Sie diese mit irgendeiner Art von benutzerdefinierten Klasse, die Ihre Daten, wie folgt mit der innerenItem
Klasse:Wenn Sie wirklich eine
ListView<String>
, es ist nicht wirklich klar, was die Eigenschaft, die Sie festlegen, durch anklicken der check-box wäre. Aber es gibt nichts zu stoppen Sie die Erstellung eines in der callback nur für den Zweck der Bindung an die check-box mit dem ausgewählten Zustand:Beachten Sie, dass in diesem Fall die
BooleanProperty
s sind potenziell entstehen und werden Häufig verworfen. Dies ist wahrscheinlich nicht ein problem in der Praxis, aber es bedeutet die erste version mit der dedizierten model-Klasse, kann bessere Leistungen erbringen.In Java 8 können Sie den code vereinfachen. Da die
Callback
Schnittstelle hat nur eine abstrakte Methode (so dass es eine Funktionale Schnittstelle), können Sie denken, einCallback<Item, ObservableValue<Boolean>>
als eine Funktion, die eineItem
und erzeugt eineObservableValue<Boolean>
. Also die Zelle-Fabrik im ersten Beispiel könnte auch geschrieben werden, mit einem lambda-Ausdruck:oder, noch prägnanter mit Methode Referenzen:
Danke!
Das hilft mir, mein problem zu lösen.
Danke für die vorherigen Antworten.
Ich vermisse die information, dass setCellValueFactory ist nicht erforderlich, aber Wert zugewiesen werden, sollte das auch in setCellFactory. Hier ist mein Ansatz (viel kopiert aus früheren Lösung).