2016-04-29 66 views
0

我想创建我的自定义TreeTableCellFactory使用CheckBox,我知道有一个默认的CellFactory叫CheckBoxTreeTableCell.forTreeTableColumn(),但我想用我的自定义cellFactory所以我可以做出头点击CheckBox后。
所以,我的问题是,当我点击复选框并呼吁commitEdit()将chagnes保存到单元格中时,它不起作用!
这里是我的自定义cellFactory类:
JavaFX的:自定义复选框treetablecell不提交更改

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); 
     } 
    } 
} 

,只需我申请cellFactory到我的专栏是这样的:

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

回答

0

我找到了解决办法,我只是有更新对象,在我的情况下Task,存在于TreeTableRow里面这样:

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); 
      } 
     });