【问题标题】:Issue binding checkbox in JavaFX TableViewJavaFX TableView 中的问题绑定复选框
【发布时间】:2013-03-31 23:20:13
【问题描述】:

我是 JavaFX 新手,所以请多多包涵。我正在尝试有一个 TableView,其中一些列将是复选框。我的意图是将这些绑定到模型对象中的布尔属性。模型对象具有定义为 SimpleBooleanProperty 的属性,并具有 getter/setter 和 property 方法。我已经验证表“看到”模型对象,因为我将一些布尔列绑定为表中的文本,果然,表按预期显示“真”或“假”。但是,我无法让复选框在任一方向绑定数据。我在下面包含了一些示例代码。

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

界面逻辑:

...
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,则在呈现表格时它不会显示为选中。

欢迎提出任何建议。看起来这应该有效,但它没有。

谢谢。

【问题讨论】:

  • 我遇到了完全相同的问题,我认为这段代码应该可以工作,但显然不行。你已经能够解决这个问题了吗?

标签: binding checkbox javafx tableview


【解决方案1】:

您可能需要在 DataModel 中的代码中添加以下行

    public SimpleBooleanProperty prop1Property() {return prop1;}
    public SimpleBooleanProperty prop2Property() {return prop2;}

【讨论】:

  • 在它上面工作了一段时间,现在它可以工作了。我仍然有一个变量的吸气剂,这通常足够好,例如一个表视图。对于复选框,此代码是必需的。为此 +1。
【解决方案2】:

代替

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

使用

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多