Ich versuche, meine Gewohnheit TreeTable
CellFactory
mit CheckBox
zu schaffen, ich weiß, dass es ein Standard CellFactory CheckBoxTreeTableCell.forTreeTableColumn()
genannt ist, aber ich möchte, dass meine benutzerdefinierte cellFactory verwenden, so kann ich irgendwas tun nach einem Klick auf die CheckBox
.
Also, mein Problem ist, dass, wenn ich auf das Kontrollkästchen klicke und commitEdit()
aufrufen, um die Chagnes in der Zelle zu speichern, funktioniert es nicht!
Hier ist meine individuelle cellFactory Klasse:
JavaFX: custom Checkbox treetablecell die Änderungen nicht begehen
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.CheckBox;
import javafx.scene.control.TreeTableCell;
import smt.tsk.model.Task;
public class CheckboxCellFactory extends TreeTableCell<Task, Boolean>{
private CheckBox checkBox;
public CheckboxCellFactory() {
checkBox = new CheckBox();
checkBox.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("clicked: "+checkBox.isSelected());
//---I called this here to save changes into the cell after clicking on the CheckBox
commitEdit(checkBox.isSelected());
}
});
}
@Override
protected void updateItem(Boolean item, boolean empty) {
if (empty) {
setText(null);
setGraphic(null);
}else{
checkBox.setSelected(item);
setText(null);
setGraphic(checkBox);
}
}
}
Und einfach angewendet ich die cellFactory meiner Spalte wie folgt aus:
myColumn.setCellFactory(new Callback<TreeTableColumn<Task,Boolean>, TreeTableCell<Task,Boolean>>() {
@Override
public TreeTableCell<Task, Boolean> call(TreeTableColumn<Task, Boolean> e) {
return new CheckboxCellFactory();
}
});