Hallo,
ich versuche jetzt schon seit einiger Zeit in meiner TableView die booleans aus meinem Model als CheckBoxen darzustellen. Das hier ist mein Model:
Hier tritt auch schon das erste Problem auf: Beim googlen bin ich meistens nur auf Ansätze gestoßen, in denen BooleanProperties verwendet werden, das kann ich aber nicht machen, da diese nicht serialisierbar sind, ich diese Klasse aber abspeichern muss. Meine Tabelle erstelle ich so:
Wenn ich jetzt aber eine Datei lade, ist die CheckBox immer nicht selected.
Ich habe auch so etwas probiert:
Dieser Entwurf hat auch nicht funktioniert.
Außerdem weiß ich auch noch nicht, wie ich die CheckBox dann letztendlich mit dem Model verknüpfen kann, also das beides richtig synchronisiert ist. Füge ich dafür ein onEdit bei der Column ein, oder mache ich das anders? (Es gibt ja auch noch ein bindBidirectional() (wie ich es im letzten Code Beispiel verwendet habe), aber ich glaube das funktioniert nur mit BooleanProperties...).
Ich habe auch schon versucht so etwas zu machen:
Aber damit hab ich das ganze auch nicht zum Laufen gebracht.
Ich hoffe ihr könnt mir helfen, bin echt langsam am verzweifeln!
ich versuche jetzt schon seit einiger Zeit in meiner TableView die booleans aus meinem Model als CheckBoxen darzustellen. Das hier ist mein Model:
Java:
package net.softwarepage.voclearn.code;
import java.io.Serializable;
public class Card implements Serializable{
private static final long serialVersionUID = 2526051651510336406L;
private String question;
private String anwser;
private boolean doppelt;
public Card(String question_, String anwser_, boolean doppelt_) {
question = question_;
anwser = anwser_;
doppelt = doppelt_;
}
public void setQuestion(String question_) {
question = question_;
}
public void setAnwser(String anwser_) {
anwser = anwser_;
}
public void setDoppelt(boolean doppelt_) {
doppelt = doppelt_;
}
public String getQuestion() {
return question;
}
public String getAnwser() {
return anwser;
}
public boolean isDoppelt() {
return doppelt;
}
public Card invert() {
return new Card(getAnwser(), getQuestion(), isDoppelt());
}
}
Hier tritt auch schon das erste Problem auf: Beim googlen bin ich meistens nur auf Ansätze gestoßen, in denen BooleanProperties verwendet werden, das kann ich aber nicht machen, da diese nicht serialisierbar sind, ich diese Klasse aber abspeichern muss. Meine Tabelle erstelle ich so:
Java:
doppelt.setCellFactory(CheckBoxTableCell.<Card>forTableCell(doppelt));
Wenn ich jetzt aber eine Datei lade, ist die CheckBox immer nicht selected.
Ich habe auch so etwas probiert:
Java:
doppelt.setCellFactory(c -> new MyCheckBoxTableCell<>());
public static class MyCheckBoxTableCell<S, T> extends TableCell<S, T> {
private final CheckBox checkBox;
private ObservableValue<T> ov;
public MyCheckBoxTableCell() {
this.checkBox = new CheckBox();
this.checkBox.setAlignment(Pos.CENTER);
setAlignment(Pos.CENTER);
setGraphic(checkBox);
}
@Override
public void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
setGraphic(checkBox);
if (ov instanceof BooleanProperty) {
checkBox.selectedProperty().unbindBidirectional((BooleanProperty) ov);
}
ov = getTableColumn().getCellObservableValue(getIndex());
if (ov instanceof BooleanProperty) {
checkBox.selectedProperty().bindBidirectional((BooleanProperty) ov);
}
}
}
}
Dieser Entwurf hat auch nicht funktioniert.
Außerdem weiß ich auch noch nicht, wie ich die CheckBox dann letztendlich mit dem Model verknüpfen kann, also das beides richtig synchronisiert ist. Füge ich dafür ein onEdit bei der Column ein, oder mache ich das anders? (Es gibt ja auch noch ein bindBidirectional() (wie ich es im letzten Code Beispiel verwendet habe), aber ich glaube das funktioniert nur mit BooleanProperties...).
Ich habe auch schon versucht so etwas zu machen:
Java:
package net.softwarepage.voclearn.code;
import java.io.Serializable;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
public class Card implements Serializable{
private static final long serialVersionUID = 2526051651510336406L;
private String question;
private String anwser;
private transient BooleanProperty doppelt;
private boolean doppeltBoolean;
public Card(String question_, String anwser_, boolean doppelt_) {
question = question_;
anwser = anwser_;
doppeltBoolean = doppelt_;
doppelt = new SimpleBooleanProperty(doppelt_);
}
public void setQuestion(String question_) {
question = question_;
}
public void setAnwser(String anwser_) {
anwser = anwser_;
}
public void setDoppelt(boolean doppelt_) {
doppeltBoolean = doppelt_;
doppelt = new SimpleBooleanProperty(doppelt_);
}
public String getQuestion() {
return question;
}
public String getAnwser() {
return anwser;
}
public boolean isDoppelt() {
return doppeltBoolean;
}
public BooleanProperty doppeltProperty() {return doppelt;}
public Card invert() {
return new Card(getAnwser(), getQuestion(), isDoppelt());
}
}
Aber damit hab ich das ganze auch nicht zum Laufen gebracht.
Ich hoffe ihr könnt mir helfen, bin echt langsam am verzweifeln!