2012-09-24 51 views
3

我正在为我的soap服务编写一个JavaFX客户端,并且我的fxml页面必须包含一个完全可编辑的TableView,它由Product-Class实体组成。我的表格现在包含2个文本列一个,它由双values.I的要在其添加使用复选框项的选择列cells.Using一个乐团演示应用程序扩展我一个Cell类使用一个复选框:在FXML视图复选框单元格工厂+ JavaFX上的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); 
} 
} 

然后控制器类我设置了一个cellFactory为所需的TableColumn:

private Callback<TableColumn, TableCell> createCheckBoxCellFactory() { 
    Callback<TableColumn, TableCell> cellFactory = new Callback<TableColumn, TableCell> () { 
     @Override 
     public TableCell call(TableColumn p) { 
      return new CheckBoxCell(); 
     } 
    }; 
    return cellFactory; 
} 

... 
products_table_remove.setCellFactory(createCheckBoxCellFactory()); 

我的问题是:

1)如何使用PropertyValueFactory填补选中的CheckBox此列,如果我有

private final ObservableList <Boolean> productsToRemove= FXCollections.observableArrayList(); 

由Boolean.FALSE值则创建视图。 (TableView由没有布尔属性的产品类组成(只有3个字符串和一个Double属性))?

private void setProductDescColumnCellHandler() { 
    products_table_remove.setOnEditCommit(new EventHandler() { 
     @Override 
     public void handle(CellEditEvent t) { 
     ... 

我看到了很多与entites的例子,其中有一个布尔field.In我的情况,我不想:

2)可以利用事件处理,我得到接取到产品对象,其中包含选定的行将布尔型字段添加到jax-ws生成的类中。

回答

3

1)可以使用预定义的类javafx.scene.control.cell.CheckBoxTableCell来代替你的。

2)要添加的信息的现有实例,我建议继承+委托,对于每个数据实例,实例化一个视图实例,它可以用于饲料的TableView:

class ProductV extends Product { 

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

    final Product   product; 
    final BooleanProperty delected = new SimpleBooleanProperty(false); 
} 
相关问题