在JavaFX TableView中发出绑定复选框

时间:2013-04-09 13:36:24

标签: binding checkbox javafx tableview

我是JavaFX的新手,所以请耐心等待。我正在尝试使用TableView,其中一些列将是复选框。我的目的是将这些绑定到模型对象中的布尔属性。模型对象具有定义为SimpleBooleanProperty的属性,并具有getter / setter和property方法。我已经验证了表“看到”了模型对象,因为我将一些布尔列绑定为表中的文本,果然,表格按预期显示“true”或“false”。但是,我无法获取复选框以在任一方向绑定数据。我在下面提供了一些示例代码。

public class DataModel {
  private SimpleBooleanProperty prop1;
  private SimpleBooleanProperty prop2;

  public boolean getProp1() {
    return prop1.get();
  }

  public setProp1(boolean value) {
    prop1.set(value);
  }

  public prop1() {
    return prop1;
  }

  ...
}

UI模型逻辑:

...
private ObjectProperty<ObservableList<DataModel>> listProperty;
...
List<DataModel> list = new ArrayList<DataModel>();
... add some DataModel objects to list

final ObservableList<DataModel> obsList = FXCollections.observableArrayList(list);
listProperty.set(obsList);

UI逻辑:

...
TableView table = new TableView<DataModel>();
table.setEditable(true);

TableColumn<DataModel, String> boolAsStringCol = new TableColumn<DataModel, String>("Prop1");
boolAsStringCol.setCellValueFactory(new PropertyValueFactory<DataModel, String>("prop1"));

TableColumn<DataModel, Boolean> boolAsCbxCol = new TableColumn<DataModel, Boolean>("Prop2");
boolAsCbxCol.setCellValueFactory(new PropertyValueFactory<DataModel, Boolean>("prop2"));
boolAsCbxCol.setCellFactory(CheckBoxTableCell.forTableColumn(boolAsCbxCol));
boolAsCbxCol.setEditable(true);

table.getColumns().add(boolAsStringCol);
table.getColumns().add(boolAsCbxCol);
...

我可以切换复选框,但似乎没有将属性绑定到复选框。如果我设置断点,当我选中或取消选中复选框时,不会调用setter。此外,如果在创建对象时将该属性初始化为true,则在呈现表时它不会显示为已选中。

欢迎任何建议。看起来这应该有效,但事实并非如此。

感谢。

2 个答案:

答案 0 :(得分:2)

可能需要将以下行添加到DataModel

中的代码中
    public SimpleBooleanProperty prop1Property() {return prop1;}
    public SimpleBooleanProperty prop2Property() {return prop2;}

答案 1 :(得分:0)

而不是

boolAsCbxCol.setCellFactory(CheckBoxTableCell.forTableColumn(boolAsCbxCol));

使用

boolAsCbxCol.setCellFactory(CheckBoxTableCell.forTableColumn(boolAsCbxCol::getCellData));

因为您使用的工厂方法实际上忽略了它的参数而且它是一个错误https://bugs.openjdk.java.net/browse/JDK-8186287