2016-04-29 9 views
0

Ich versuche, meine Gewohnheit TreeTableCellFactory 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(); 
      } 
     }); 

enter image description here

Antwort

0

ich die Lösung gefunden, ich habe nur um das Objekt zu aktualisieren, in meinem Fall Task, existiert das innerhalb TreeTableRow wie folgt:

checkBox.setOnAction(new EventHandler<ActionEvent>() { 

      @Override 
      public void handle(ActionEvent event) { 
       boolean c = checkBox.isSelected(); 
       TreeTableRow<Task> row = getTreeTableRow(); 
       Task tsk = row.getItem(); 
       tsk.setStat(c); 
      } 
     }); 
Verwandte Themen