在JavaFX中,嵌套对象是指一个对象包含另一个对象作为其属性。嵌套列(Nested Columns)是指在一个TableView中,某些列的数据是另一个对象,而这些对象本身也有自己的属性。为了在TableView中显示这些嵌套对象的属性,需要使用嵌套列。
JavaFX中的嵌套列主要分为两种类型:
嵌套列常用于展示具有层次结构的数据,例如:
假设我们有一个Person
类和一个Address
类,Person
类包含一个Address
对象作为其属性。我们希望在TableView中显示Person
的信息以及其对应的地址信息。
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;
public class NestedColumnsExample extends Application {
public static class Person {
private final SimpleStringProperty name;
private final Address address;
public Person(String name, Address address) {
this.name = new SimpleStringProperty(name);
this.address = address;
}
public String getName() {
return name.get();
}
public Address getAddress() {
return address;
}
}
public static class Address {
private final SimpleStringProperty city;
private final SimpleStringProperty street;
public Address(String city, String street) {
this.city = new SimpleStringProperty(city);
this.street = new SimpleStringProperty(street);
}
public String getCity() {
return city.get();
}
public String getStreet() {
return street.get();
}
}
@Override
public void start(Stage primaryStage) {
TableView<Person> tableView = new TableView<>();
TableColumn<Person, String> nameColumn = new TableColumn<>("Name");
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
TableColumn<Person, String> cityColumn = new TableColumn<>("City");
cityColumn.setCellValueFactory(cellData -> cellData.getValue().getAddress().city);
TableColumn<Person, String> streetColumn = new TableColumn<>("Street");
streetColumn.setCellValueFactory(cellData -> cellData.getValue().getAddress().street);
tableView.getColumns().addAll(nameColumn, cityColumn, streetColumn);
ObservableList<Person> data = FXCollections.observableArrayList(
new Person("Alice", new Address("New York", "Broadway")),
new Person("Bob", new Address("Los Angeles", "Sunset Blvd"))
);
tableView.setItems(data);
Scene scene = new Scene(tableView, 300, 250);
primaryStage.setTitle("Nested Columns Example");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
PropertyValueFactory
配置错误或数据模型中的getter方法名称不正确。PropertyValueFactory
的参数与数据模型中的属性名称一致,并且getter方法名称正确。通过以上示例代码和解释,您应该能够理解和使用JavaFX中的嵌套列来展示复杂的数据结构。
领取专属 10元无门槛券
手把手带您无忧上云