将person.city.name添加到TableView

时间:2014-10-28 13:16:10

标签: java data-binding javafx tableview fxml

我有一个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>`

我的PersonaDeuda类:

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中呈现任何内容。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您无法使用PropertyValueFactory执行此操作:您需要直接实施Callback

在表格列上放置fx:id="actualColumn",使用

将列注入控制器
@FXML
private TableColumn<Persona, BigDecimal> actualColumn ;

并在您的控制器的initialize()方法中,执行:

actualColumn.setCellValueFactory(cellData -> 
    new ReadOnlyObjectWrapper<BigDecimal>(cellData.getValue().getDeuda().getSaldo()));