此問題進一步發生在JavaFX: Disable multiple rows in TableView based on other TableView停止。我想產生一個更普遍的話題,其他人也可以從中受益。JavaFX:BooleanBindings綁定多個EasyBind地圖
我也有兩個tableviews。當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;
});
現在我只想禁用行時:
- 從表1的產品的SKU也是在表2(這個工程現在)
- 表2中的產品的量爲負
我不知道如何檢查的數額,因爲我需要與該特定SKU相關的量。如何在一個BooleanBinding中創建多個貼圖?
任何幫助,非常感謝!
你可能需要詳細說明你在這裏的類型。它看起來像'table1'和'table2'都是'TableView's。因此,表1中的產品數量必須與表2中具有相同SKU的產品數量相同(它們不是相同的對象..)? –
2014-10-29 14:54:00
@James_D沒有不同的對象,它們只有相同的SKU。問題是這樣的:表2中的產品需要放在table1中,並且金額爲負值。我知道如何做到這一點。但是,table1中可能有一個具有相同SKU的對象,其積極金額不是來自table2,而是來自其他來源。通過上面的解決方案,該行在禁用時不會被禁用,因爲表1中的數量是正數而不是負數。你到底懂不懂呢? – bashoogzaad 2014-10-29 15:02:25