这个问题在JavaFX: Disable multiple rows in TableView based on other TableView停止的地方更进一步。我想提出一个更笼统的话题,其他人也可以从中受益。
我也有两个表视图。当 table1 包含相同的对象时,我还想禁用 table2 中的一行。这是通过以下代码实现的:
//Check if a row needs to be disabled: this is achieved with a rowfactory
ObservableList<String> listOfSKUs = EasyBind.map(table1.getItems(),Product::getSKU);
table2.setRowFactory(tv -> {
TableRow<Product> row = new TableRow<>();
//The row doesnt need to be checked when it is empty, thats the first part
//The second part is a big OR: the row is a gift card OR the listOfSkus contains the row. In this last one, the amount also needs to be checked.
row.disableProperty().bind(Bindings.createBooleanBinding( () ->
row.getItem() != null &&
(row.getItem().getProductName().equals("Kadobon") ||
(listOfSKUs.contains(row.getItem().getSKU()) //&& some part to check for the amount)
), listOfSKUs, row.itemProperty() ));
return row;
});
现在我只希望在以下情况下禁用该行:
- table1 中产品的 SKU 也在 table2 中(现在可以使用)
- 表2中产品的金额为负数
我不知道如何查看金额,因为我需要与某个 SKU 关联的金额。如何在一个 BooleanBinding 中使用多个地图创建它?
任何帮助是极大的赞赏!