复选框单元工厂+;JavaFX上的Tableview

复选框单元工厂+;JavaFX上的Tableview,java,tableview,javafx,checkbox,Java,Tableview,Javafx,Checkbox,我正在为我的soap服务编写一个JavaFX客户机,我的fxml页面必须包含一个完全可编辑的TableView,它由产品类实体组成,它由两个值组成。我想在它的单元格中添加一个带有复选框项的选择列。使用集成演示应用程序,我扩展了一个单元格类,以使用复选框: public class CheckBoxCell<S, T> extends TableCell<S, T> { private final CheckBox checkBox; private Observable

我正在为我的soap服务编写一个JavaFX客户机,我的fxml页面必须包含一个完全可编辑的TableView,它由产品类实体组成,它由两个值组成。我想在它的单元格中添加一个带有复选框项的选择列。使用集成演示应用程序,我扩展了一个单元格类,以使用复选框:

public class CheckBoxCell<S, T> extends TableCell<S, T> {

private final CheckBox checkBox;
private ObservableValue<T> ov;

public CheckBoxCell() {
    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);
        }
    }
}

@Override
public void startEdit() {
    super.startEdit();
    if (isEmpty()) {
        return;
    }
    checkBox.setDisable(false);
    checkBox.requestFocus();
}

@Override
public void cancelEdit() {
    super.cancelEdit();
    checkBox.setDisable(true);
}
}
我看到了很多实体的例子,它们有一个布尔字段,在我的例子中,我不想将布尔字段添加到jax ws生成的类中

1)可以使用预定义类代替您的类

2) 要向现有实例添加信息,我建议继承+委派,对于每个数据实例,实例化一个视图实例,该实例可用于向TableView提供信息:

class ProductV extends Product {

   ProductV( Product product ) {
      this.product = product;
   }

   final Product         product;
   final BooleanProperty delected = new SimpleBooleanProperty( false );
}
private final ObservableList <Boolean> productsToRemove= FXCollections.observableArrayList();
private void setProductDescColumnCellHandler() {
    products_table_remove.setOnEditCommit(new EventHandler() {
        @Override
        public void handle(CellEditEvent t) {
        ...
class ProductV extends Product {

   ProductV( Product product ) {
      this.product = product;
   }

   final Product         product;
   final BooleanProperty delected = new SimpleBooleanProperty( false );
}