从JavaFx TableView上的item获取属性

时间:2014-08-27 12:20:21

标签: java javafx javafx-2 javafx-8

我有一张表来列出订单。 如果我想用表的属性绑定表列,我这样做:

<TableColumn prefWidth="361.0" text="Name">
    <cellValueFactory>
        <PropertyValueFactory property="person" />
    </cellValueFactory>
</TableColumn>

但是如果我想用这个属性的属性绑定它?我试过这样做,但是id没有用:

<TableColumn prefWidth="361.0" text="Name">
    <cellValueFactory>
        <PropertyValueFactory property="person.age" />
    </cellValueFactory>
</TableColumn>

怎么做?

这是我的模特课:

public class Order{
   private Integer number;
   private Date date;
   private Person person;
   //getters and setters...
}

这是Person类:

public class Person{
   private String name;
   private Integer age;
   //getters and setters...
}

1 个答案:

答案 0 :(得分:1)

您不能在此处直接在FXML中设置单元格工厂,除非您遇到使自己的类实现相应的Callback的麻烦。

而是在控制器中设置单元工厂:

<TableColumn prefWidth="361.0" text="Name" fx:id="ageColumn"/>

并在控制器中:

public class Controller {
    @FXML
    private TableColumn<Order, Integer> ageColumn ;

    public void initialize() {
        ageColumn.setCellValueFactory( data -> {
             Order order = data.getValue();
             Person person = order.getPerson();
             Integer age = person.getAge();
             return new ReadOnlyIntegerWrapper(age);
        });

        //...
   }
 );