7

この質問は、JavaFX: BooleanBindings が複数の EasyBind マップとのバインドで停止した場所でさらに進みます。

行ファクトリをもう少し拡張したいと思います。表 1 では、製品は 1 行に 1 個ずつ表示されているため、1 つの製品オブジェクトに対して複数の行が存在する可能性があります。テーブル 2 の金額が行の合計金額と等しい場合にのみ、行を無効にしたいと考えています。例: Product(SKU: P1) には、table1 に 3 つの行があります (すべて金額 1 を表します)。商品 (SKU: P1) の金額が table2 で -2 の場合、この商品オブジェクトの 2 行を table1 で無効にする必要があります。1 つを有効にする必要がありますが、3 つのうちどれを使用してもかまいません。

現在、次のコードがあります。

table1.setRowFactory(tv -> {
    TableRow<Product> row = new TableRow<>();        
    row.disableProperty().bind(Bindings.createBooleanBinding(
    () -> row.getItem() != null && (row.getItem().getSKU().startsWith("C") ||
        (skuAmountLookup.containsKey(row.getItem().getSKU()) &&
            -skuAmountLookup.get(row.getItem().getSKU()) <
            amounts[SKUs.indexOf(row.getItem().getSKU())] )), 
        skuAmountLookup,
        row.itemProperty()));   
    return row;
});

どこにskuAmountLookupある:

skuAmountLookup = table2.getItems().stream().collect(
    Collectors.toMap(Product::getSKU, Product::getAmount, (x, y) -> y,
        () -> FXCollections.observableHashMap()));

これは、合計金額が表 1 の場合にのみ行を無効にします。 に変更amounts[SKUs.indexOf(row.getItem().getSKU())]する0と、商品が 1 つだけ存在する場合にすべての行が無効になります。

私の質問は、別の行の disableProperty が考慮されるように行ファクトリを変更するにはどうすればよいですか?

詳細については、JavaFX: 複数の EasyBind マップを使用したバインドの BooleanBindingsおよびJavaFX: 他の TableView に基づく TableView で複数の行を無効にする を参照してください。

4

0 に答える 0