我有一个TreeTableView,它具有第一列,该列将显示其包含的数据的两个值(一个文本和一个对应的图标)。
因此,我将第一列定义如下:
@FXML
private TreeTableColumn<IPackagingUnit, IPackagingUnit> colSerial;
将cellFactory
设置为:
colSerial.setCellFactory(CellFactorySerial.INSTANCE);
最后将cellValueFactory
设置为:
colSerial.setCellValueFactory(param -> new ReadOnlyObjectWrapper<>(param.getValue().getValue()));
CellFactorySerial
定义为:
public class CellFactorySerial implements Callback<TreeTableColumn<IPackagingUnit, IPackagingUnit>, TreeTableCell<IPackagingUnit, IPackagingUnit>> {
public static CellFactorySerial INSTANCE = new CellFactorySerial();
private CellFactorySerial() {
// Nothing
}
/** {@inheritDoc} */
@Override
public TreeTableCell<IPackagingUnit, IPackagingUnit> call(final TreeTableColumn<IPackagingUnit, IPackagingUnit> param) {
return new SerialCell();
}
private static class SerialCell extends AbstractPackagingUnitCellFactory<IPackagingUnit> {
@Override
public void updateItem(final IPackagingUnit item, final boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setGraphic(null);
setText(null);
} else {
setText(item.getPrimaryIdentity());
setGraphic(new BufferedImageView(item.getPackagingLevel().getIcon()).getFXImageView());
}
};
}
}
AbstractPackagingUnitCellFactory
到目前为止是一个空壳。
我现在要做的是使此单元格可编辑,这样只有PrimaryIdentity
是可编辑的。
但是当我如下设置onEditCommit
colSerial.setOnEditCommit(event -> {
final TreeItem<IPackagingUnit> item = event.getRowValue();
final IPackagingUnit emp = item.getValue();
emp.setPrimaryIdentity(event.getNewValue());
});
这当然是行不通的,因为newValue
是对象,而不是我想要的简单字符串。
我认为我有以下选择和问题:
IPackagingUnit, String
,但是那样我会丢失获取图标所需的信息我目前正在尝试第一种方法,但是似乎无法从param
的{{1}}中取出包装单元,无法将包装单元本身传递到单元格以处理图标。
任何人都知道如何
call(final TreeTableColumn<IPackagingUnit, IPackagingUnit> param)
的第一个通用参数?param
并且仍要进行IPackagingUnit
编辑?谢谢
答案 0 :(得分:0)
好吧,虽然这并不是我真正想要的,但稍事休息然后回来,我发现了getTreeTableRow
(属于TreeTableCell
),这有助于选择一。可能是这样做的唯一方法...