我正在为我的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生成的类中。