gpt4 book ai didi

JavaFX:使用来自不同类的数据填充 TableView

转载 作者:行者123 更新时间:2023-11-30 06:48:37 27 4
gpt4 key购买 nike

我正在创建一个具有不同类的应用程序,例如 User , Product , DonorCar 。每个类都存储要在 JavaFX TableView 中显示的相关信息。 – User类有 String nameint userID例如。

我将所有这些收集在一个名为 Data 的类中它接受上面提到的类并存储它们。我最终得到了 ArrayList<Data>其中每个索引存储上面的四个类。

如果我做一个ObservableArrayList基于ArrayList<Data>如何从 Data 中存储的每个类中检索信息类(class)?我正在关注Oracle's own tutorial here ,但它只考虑了您想要存储单个类信息的情况。

谢谢!

最佳答案

您提到的教程使用 PropertyValueFactory 。这在这里不适用,因为它仅内省(introspection)给定的类,但如果您查看该类的文档,它包含以下长格式:

TableColumn<Person,String> firstNameCol = new TableColumn<Person,String>("First Name");
firstNameCol.setCellValueFactory(new Callback<CellDataFeatures<Person, String>, ObservableValue<String>>() {
public ObservableValue<String> call(CellDataFeatures<Person, String> p) {
// p.getValue() returns the Person instance for a particular TableView row
return p.getValue().firstNameProperty();
}
});
}

因此,您可以对数据类使用相同的概念,从数据对象的用户对象中检索适当的字段:

firstNameCol.setCellValueFactory(new Callback<CellDataFeatures<Data, String>, ObservableValue<String>>() {
public ObservableValue<String> call(CellDataFeatures<Data, String> data) {
// data.getValue() returns the Data instance for a particular TableView row
return data.getValue().getUser().firstNameProperty();
}
});
}

如果您使用 Java 8 lambda,则可以消除一些丑陋的地方。

如果您的用户对象没有值的属性访问器,而只有 getter,则可以将结果包装在 ReadOnlyObjectWrapper 中,如 PropertyValueFactory 文档中所述:

return new ReadOnlyObjectWrapper(data.getValue().getUser().getFirstName());

如果您的表不可编辑并且您不希望表数据自动更改(如果基础字段发生更改),那么这很好,否则首选基于属性访问器的方法。

关于JavaFX:使用来自不同类的数据填充 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43251011/

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