【发布时间】:2017-04-19 12:03:57
【问题描述】:
在将 bean 适配器对象绑定到 TableView 时遇到问题,TableView 会使用该适配器属性创建组合框。
lanSpecie.setCellFactory(new Callback<TableColumn<HAUL,Specie>, TableCell<HAUL,Specie>>() {
@Override
public TableCell<HAUL, Specie> call(TableColumn<HAUL, Specie> param) {
TableCell<HAUL, Specie> cell = new TableCell<>();
ComboBox<Specie> comboBox = new ComboBox<>(FXCollections.observableList(specieService.findAllAdded()));
try {
comboBox.valueProperty().bindBidirectional(new JavaBeanObjectPropertyBuilder<Object>().bean(haulBean).name("specie").build());
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
cell.graphicProperty().bind(Bindings.when(cell.emptyProperty()).then((Node) null).otherwise(comboBox));
return cell;
}
});
我的表添加了 3 行:
每当我更改一个元素时,它都会自动更改所有 3 个。
寻找解决方案或指导正确的方向,以便表格将每个行元素作为新的 HAUL 对象查找,从而为每行创建新的适配器实例。
【问题讨论】:
-
该代码中的
haulBean是什么?看起来您正在将所有组合框的值绑定到单个属性。你不能在这里使用标准的ComboBoxTableCell吗? -
haulBean 是我的实体对象(本例中为 POJO)。可以将 javabean 适配器字段绑定到 ComboBoxTableCell 吗?
-
但是哪个实体对象?每行都有一个。这真的没有意义。您应该使用单元格 value 工厂映射到 Java Bean Adapter,然后使用单元格工厂指定表格单元格。我看不出有任何理由不适用于
ComboBoxTableCell。 -
喜欢这个? link
-
有点,但看起来您对每一行都使用相同的值:
haulBean仍然是一个固定行的值。你肯定想要new JavaBeanObjectPropertyBuilder<Object>().bean(param.getValue())...
标签: java javafx combobox tableview javabeans