www*_*www 3 binding javafx tableview
我有以下课程:
public class Person {
private final StringProperty firstName;
private final StringProperty lastName;
public String getFirstName() {
return firstName.get();
}
public void setFirstName(String firstName) {
this.firstName.set(firstName);
}
public StringProperty firstNameProperty() {
return firstName;
}
public String getLastName() {
return lastName.get();
}
public void setLastName(String lastName) {
this.lastName.set(lastName);
}
public StringProperty lastNameProperty() {
return lastName;
}
public StringProperty getName() {
return new SimpleStringProperty(firstName.get() + " " + lastName.get());
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个 TableView,我在其中在一列中显示两个名称:
@FXML
private TableView<Person> personTable;
@FXML
private TableColumn<Person, String> name;
@FXML
private void initialize() {
name.setCellValueFactory(cellData -> cellData.getValue().getName());
personTable.getSelectionModel().selectedItemProperty().addListener(
(observable, oldVal, newVal) -> showDetails(newVal));
}
Run Code Online (Sandbox Code Playgroud)
现在我可以对我的 Person 对象进行更改,但它们没有显示在 TableView 列中。当我再次打开编辑窗口时,我看到了新值,但在我的 TableView 中我看到了旧值。我该怎么办?
做
public class Person {
private final ReadOnlyStringWrapper name = new ReadOnlyStringWrapper();
private final StringProperty firstName = new SimpleStringProperty();
private final StringProperty lastName = new SimpleStringProperty();
public Person() {
name.bind(Bindings.concat(firstName, " ", lastName));
// existing code...
}
// existing code...
public ReadOnlyStringProperty nameProperty() {
return name.getReadOnlyProperty();
}
public final String getName() {
return name.get();
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以做
@FXML
private TableColumn<Person, String> name;
@FXML
private void initialize() {
name.setCellValueFactory(cellData -> cellData.getValue().nameProperty());
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以从Person类中完全省略全名,而只需在单元格值工厂中需要的位置创建绑定:
name.setCellValueFactory(cellData -> Bindings.concat(
cellData.getValue().firstNameProperty(),
" ",
cellData.getValue().lastNameProperty()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3362 次 |
| 最近记录: |