gpt4 book ai didi

javafx - TableView中的JavaFX属性

转载 作者:行者123 更新时间:2023-12-03 09:39:26 25 4
gpt4 key购买 nike

我正在自学如何在TableView中使用JavaFX属性,并且在某些属性类型上遇到了麻烦。我有一个对象Person包含两个属性

public class Person {

private final StringProperty firstName;
private final IntegerProperty age;

public Person(String firstName, Integer age) {
this.firstName = new SimpleStringProperty(firstName);
this.age = new SimpleIntegerProperty(age);
}


public Integer getAge() {
return age.get();
}

public void setAge(Integer age) {
this.age.set(age);
}

public IntegerProperty ageProperty() {
return age;
}

public String getFirstName() {
return firstName.get();
}

public void setFirstName(String firstName) {
this.firstName.set(firstName);
}

public StringProperty firstNameProperty() {
return firstName;
}

}

目标一旦创建便是在TableView中使用此对象。我已经像这样创建了两个表列。
TableColumn<Person, String> firstNameColumn = new TableColumn<Person, String>("First Name");
TableColumn<Person, Integer> ageColumn = new TableColumn<Person, Integer>("Age");

然后,我想使用Lambda表达式设置单元格值工厂。这就是问题所在。 StringProperty firstName可以正常工作。但是,IntegerProperty给我错误消息 “类型不匹配:无法从IntegerProperty转换为ObservableValue<Integer>
firstNameColumn.setCellValueFactory(cellData -> cellData.getValue().firstNameProperty());
ageColumn.setCellValueFactory(cellData -> cellData.getValue().ageProperty());

任何人都可以阐明ageColumn.setCellValueFactory(...)出了什么问题吗?任何帮助将不胜感激。

谢谢!

最佳答案

属性API的一个有点奇怪的部分是IntegerProperty实现ObservableValue<Number>而不是ObservableValue<Integer>。因此,有点违反直觉,您需要

TableColumn<Person, Number> ageColumn = new TableColumn<Person, Number>("Age");

顺便说一句,我不确定这是否会引起问题,但是在模型类中,使用 int而不是 Integer作为get方法的返回类型和set方法的参数类型更为常见。这些匹配 IntegerProperty.get()IntegerProperty.set(...)的类型,因此它只是避免了一些隐式自动(取消)装箱。

关于javafx - TableView中的JavaFX属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24889638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com