gpt4 book ai didi

java - 当并非所有属性都在同一个类中时填充 JavaFX TableView

转载 作者:行者123 更新时间:2023-12-02 09:16:19 26 4
gpt4 key购买 nike

我有一个关于在 JavaFX 中填充 TableView 的问题。首先,我是 javaFX 的新手,对我的无知感到抱歉。

我做了一个简单的例子来尝试表格 View 的工作原理:

public class Person{

private StringProperty firstName, lastName;
private IntegerProperty age;

//Left the constructor and getters out

}

对于 Controller :

public class Controller implements Initializable {

@FXML private TableView tableView;
@FXML private TableColumn firstNameColumn, lastNameColumn, ageColumn;

@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
ObservableList<Person> data = FXCollections.observableArrayList();
tableView.setItems(data);

firstNameColumn.setCellFactory(new PropertyValueFactory<Person, String>("firstName"));
lastNameColumn.setCellValueFactory(new PropertyValueFactory<Person, String>("lastName"));
ageColumn.setCellValueFactory(new PropertyValueFactory<Person, Integer>("age"));

data.add(new Person("Piet", "Jansen", 22));
}
}

这很好用,但是如果每个人都有一个包含名字和姓氏的 Name 对象怎么办?

例如:

public class Person{

private Name name;
private IntegerProperty age;

//Left the constructor and getters out

}

命名类:

public class Name {

private StringProperty firstName, lastName;

public Name(String firstName, String lastName) {
this.firstName = new SimpleStringProperty(firstName);
this.lastName = new SimpleStringProperty(lastName);
}

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

public StringProperty firstNameProperty() {
return firstName;
}

public String getLastName() {
return lastName.get();
}

public StringProperty lastNameProperty() {
return lastName;
}
}

提前致谢:)

最佳答案

通过假设列不可编辑,您始终可以自定义在列 View 渲染中显示基础模型类的属性或属性组合的内容和方式。例如,对于给定的 Person 模型类,您可以在 tableView 的一列中显示其所有属性(姓氏、名字、年龄等)。按照代码:

TableColumn nameCol = new TableColumn("First and Last Name");
nameCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(TableColumn.CellDataFeatures<Person, String> p) {
// p.getValue() returns the Person instance for a particular TableView row
return p.getValue().getName().firstNameProperty().concat(" - ").concat(p.getValue().getName().lastNameProperty());
// and concating maybe other attributes like: p.getValue().getOrganization().getCity().idenNumberProperty(); etc.
}
});

如果类名称具有常规属性,例如

private String firstName;
private String lastName;

而不是JavaFX的SimpleStringProperty,那么

TableColumn nameCol = new TableColumn("First and Last Name");
nameCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(TableColumn.CellDataFeatures<Person, String> p) {
return new SimpleStringProperty(p.getValue().getName().getFirstName() + " - " + p.getValue().getName().getLastName());
}
});

如果该列将是可编辑的,那么您需要做更多的工作,例如解析“名字和姓氏”列项字符串值并将各部分设置为 Name 类的适当属性,在 onEditCommit( ) 例如处理程序。

关于java - 当并非所有属性都在同一个类中时填充 JavaFX TableView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19209155/

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