- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
今天,我在尝试了解有关 JavaFX 和 Java 的更多信息时遇到了另一件我不太了解的事情。
引用以下教程(我试图将原理应用于组织者):
我将简要概述我有问题的特定部分:
我的主窗口包含一个显示一些约会数据的表格 View 。所以我得到了一些这种风格的线条(与教程中的相同):
aColumn.setCellValueFactory(cellData ->cellData.getValue().getAColumnsProperty());
可以通过附加的 EditDialog 操作数据。那很好用。如果我编辑内容,更改会立即显示,但我做了一些额外的研究以更好地理解 Lambda(不太成功)。现在...在在线 java 文档中 Java Doc PropertyValueFactory它说:“回调接口(interface)的便捷实现,[...]”
所以我将我的代码重构为这种风格:
aColumn.setCellValueFactory(new PropertyValueFactory<Appointment,LocalDate>("date"));
我发现它比 Lambda 更具可读性。但我注意到,当我进行更改时,我需要在显示更改之前对 TableView 进行一些排序。
是否可以通过第二种方式实现变化的即时显示?
如果是:是否存在阻碍此类修改的主要缺点? IE。在这种情况下,Lambda 会是最佳实践吗?
感谢任何帮助。
最佳答案
PropertyValueFactory
期望正确命名的属性 getter 。 getAColumnsProperty
可能不是一个。
如果是new PropertyValueFactory<Appointment, LocalDate>("date")
Appointment
类需要包含 dateProperty()
方法;返回值需要扩展 ReadOnlyProperty
为此,如果返回的对象也是WritableValue
,任何编辑只会自动导致模型更新。 .
示例 Appointment
应与 PropertyValueFactory<>("date")
一起使用的类:
public class Appointment {
private final ObjectProperty<LocalDate> date = new SimpleObjectProperty<>();
public final LocalDate getDate() {
return this.date.get();
}
public final void setDate(LocalDate value) {
this.date.set(value);
}
public final ObjectProperty<LocalDate> dateProperty() {
return this.date;
}
}
如果不存在这样的方法,PropertyValueFactory
将使用 getter 来检索值,即 getDate()
, 但在更新 Cell
之前,模型中的这种情况更新在 UI 中是不可见的, 自 PropertyValueFactory
“不知道”在哪里添加监听器。
PropertyValueFactory
的缺点public
public
中的方法类PropertyValueFactory
使用反射new PropertyValueFactory<Appointment, LocalDate>("date")
编译器不会检查,如果有一个合适的方法,如果该方法甚至返回一个合适的类,或者如果属性 getter 返回 String
而不是 ReadOnlyProperty<LocalDate>
这可能导致 ClassCastException
s.PropertyValueFactory
这还没有完成。如果你确定在item类中正确实现了合适的方法,那么使用PropertyValueFactory
是没有错的。 ,但如上所述,它有它的缺点。此外实现 Callback
更加灵活。你可以例如做一些额外的修改:
TableColumn<Appointment, String> column = ...
column.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Appointment, String>, ObservableValue<String>> {
@Override
public ObservableValue<String> call(TableColumn.CellDataFeatures<Appointment, String> cd) {
Appointment a = cd.getValue();
return Bindings.createStringBinding(() -> "the year: " + a.getDate().getYear(), a.dateProperty());
}
});
关于Java: setCellValuefactory; Lambda 与 PropertyValueFactory;优点缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38049734/
我知道,这个问题已经被问过数百次了,我花了 3 个小时阅读了所有这些问题。我正在使用 JavaFX 编写一个小应用程序(我之前已经这样做过......)。除了将内容放入我的专栏之外,一切正常: @FX
我已经定义了表: @FXML private TableView tv_loro_nostro_accounts; private TableColumn tc_acc_nam
我正在尝试执行以下操作: tableColumns[0].setCellValueFactory( new PropertyValueFactory("username")
我已经检查了至少 20 个与该主题相关的其他线程,并尝试尽我所能进行调试,但我不知道为什么它不起作用。我希望我的“addButton”在按下按钮时将数据从文本框添加到我的 TableView 中。 我
我有一个填充对象列表的表,在其中一个列中我有一个comboBoxColumn。虽然 combobox 列不是 object 类的一部分,但我只是希望它在列中显示一个 String 。 我该怎么做?无需
在与 Netbeans 和 Scenebuilder 混了一段时间之后,我遇到了一个我不太明白的问题。我使用自定义 cellfactory将双击事件绑定(bind)到我的表格 View 中的单元格。但
我们如何使用 setCellValueFactory 和 setCellFactory? 它们之间有什么区别? 最佳答案 根据文档: setCellValueFactory 需要设置单元格值工厂以指定
我有一个自定义类 BasicDataSet其中包含 HashMap需要渲染(和可更新)到 JavaFX TableView 。一个BasicDataSet对象表示一行,该列缺少的任何 HashMap
我有一个带有自定义单元格渲染的表列,此单元格渲染采用一个对象并将其属性渲染为标签。问题是我找不到将数组列表中的相同对象传递到列的方法。这是我的代码: //I want to render this
我正在尝试遵循此 JavaFX 2 指南: http://docs.oracle.com/javafx/2/ui_controls/table-view.htm#CJAGAAEE 我使用 Scala
今天,我在尝试了解有关 JavaFX 和 Java 的更多信息时遇到了另一件我不太了解的事情。 引用以下教程(我试图将原理应用于组织者): JavaFX 8 Tutorial 我将简要概述我有问题的特
我有以下代码行在 JavaFX 中设置列: branchActionColumn.setCellValueFactory(cd -> cd.getValue().getAction().getTe
来自 eclipse 帮助: setCellValueFactory 需要将单元格值工厂设置为指定如何填充单个 TableColumn 中的所有单元格。单元值工厂是一个提供 CellDataFeatu
所以我遇到的主要问题是尝试设置 columnUUID.setCellValueFactory( new PropertyValueFactory("different") ); 时它不会填充 colu
我是一名优秀的程序员,十分优秀!