我正在自己完成Oracle的JavaFX教程.经过多年的摇摆(很久以前),我对新的智能功能很着迷,包括.属性.我很惊讶地发现这些例子(例如:https://docs.oracle.com/javafx/2/ui_controls/table-view.htm)并没有以我认为"正确"的方式使用它们.
该示例创建一个Person具有属性作为字段的类:
public static class Person {
private final SimpleStringProperty firstName;
...
Run Code Online (Sandbox Code Playgroud)
但吸气剂不是属于物业,而是属于他们的价值观
public String getFirstName() {
return firstName.get();
}
Run Code Online (Sandbox Code Playgroud)
所以当它将它们绑定到TableCell列中的s时,它会将它们包装在一个新属性中:
emailCol.setCellValueFactory(
new PropertyValueFactory<Person, String>("firstName"));
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很复杂,并且错过了事件传播的真正优势,不仅仅是使用它:
firstNameCol.setCellValueFactory( celldata ->
celldata.getValue().firstNameProperty());
Run Code Online (Sandbox Code Playgroud)
我的问题:这个例子是否有理由不直接在控件中公开和使用 bean的属性?我在这里错过了什么吗?
注意:我确实以这种方式更改了代码,并且示例运行得更好:Person其他控件对实体的更新立即传播,无需调用table.refresh()例如