Bind nested object properties to tableview in JavaFX

I have the next class

public class ProductStockDto extends 

    private Long id;
    private Long amount;
    private ProductDto product;
    private StockDto stock;

    //getters and setters...
}

In JavaFX, I have my table, and I want to add product The name attribute is bound to the column, like this

ObservableList<ProductStockDto> data = FXCollections.observableArrayList();
data.addAll(products);
nameColumn.setCellValueFactory(new PropertyValueFactory("product.name"));
productTable.setItems(data);

But when I do, the rows on the tableview appear blank

Can someone help me with this? I want to bind nested object properties, which is like ${product. Name} on Java swing

thank you.

Solution

JavaFX does not support this format. As a solution, you can try this method:

nameColumn.setCellValueFactory(new Callback<CellDataFeatures<ProductStockDto,String>,ObservableValue<String>>() {  
    @Override  
    public ObservableValue<String> call(CellDataFeatures<ProductStockDto,String> data){  
         return data.getValue().getProducts().nameproperty();  
    }  
});

Where productdto will own

public class ProductDto{

    private StringProperty name = new SimpleStringProperty("Itachi");

    public String getName() {
        return name.get();
    }

    public void setStreet(String name) {
        this.name.set(name);
    }

    public StringProperty nameproperty(){
        return name;
    }
}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>