我有一个TableView和一些POJO,并希望将其中一个属性绑定到TableView。
但是,这个属性也是一个POJO,它应该在TableView中显示一个属性。
这是我的代码:
<TableView fx:id="listaDeudores" layoutX="85.0" layoutY="7.0" prefHeight="200.0" prefWidth="200.0">
<columns>
<TableColumn prefWidth="75.0" text="Archivo">
<cellValueFactory>
<PropertyValueFactory property="archivo" />
</cellValueFactory>
<cellFactory>
<FormattedTableCellFactory alignment="center" />
</cellFactory>
</TableColumn>
<TableColumn prefWidth="299.0" text="Nombres">
<cellValueFactory>
<PropertyValueFactory property="nombres" />
</cellValueFactory>
<cellFactory>
<FormattedTableCellFactory alignment="center" />
</cellFactory>
</TableColumn>
<TableColumn minWidth="0.0" prefWidth="95.0" text="Actual" >
<cellValueFactory>
<PropertyValueFactory property="deuda.saldo" />
</cellValueFactory>
<cellFactory>
<FormattedTableCellFactory alignment="center" />
</cellFactory>
</TableColumn>
<TableColumn prefWidth="75.0" text="Nueva" />
<TableColumn prefWidth="75.0" text="Parcial" />
</columns>
</TableView>`
我的Persona
和Deuda
类:
public class Persona {
private Integer id;
private Integer archivo;
private String Nombres;
private List<Recibo> recibos;
private Deuda deuda;
}
public class Deuda {
private Date fecha;
private BigDecimal saldo;
private BigDecimal nuevo;
private BigDecimal descuento;
}
我想在fxml文件中设置Person.deuda.saldo,所以我使用了:
<TableColumn minWidth="0.0" prefWidth="95.0" text="Actual" >
<cellValueFactory>
<PropertyValueFactory property="deuda.saldo" />
</cellValueFactory>
<cellFactory>
<FormattedTableCellFactory alignment="center" />
</cellFactory>
</TableColumn>
但这不会在我的TableView中呈现任何内容。我该如何解决这个问题?
答案 0 :(得分:1)
您无法使用PropertyValueFactory
执行此操作:您需要直接实施Callback
。
在表格列上放置fx:id="actualColumn"
,使用
@FXML
private TableColumn<Persona, BigDecimal> actualColumn ;
并在您的控制器的initialize()
方法中,执行:
actualColumn.setCellValueFactory(cellData ->
new ReadOnlyObjectWrapper<BigDecimal>(cellData.getValue().getDeuda().getSaldo()));