当前位置: 首页 > 知识库问答 >
问题:

Java:SetCellValueFactory;Lambda诉PropertyValueFactory;优点/缺点

汪兴旺
2023-03-14

今天,我在学习JavaFX和Java时遇到了另一件我并不真正理解的事情。

参考以下教程(我试图将该原则应用于组织者):

我的主窗口包含一个tableview,它显示一些约会数据。所以我得到了一些这种风格的线条(与教程中相同):

aColumn.setCellValueFactory(cellData ->cellData.getValue().getAColumnsProperty());

可以通过附加的EditDialog操作数据。很好用。如果我编辑东西,更改会立即显示,但我做了一些额外的研究来更好地理解Lambda(不太成功)。现在...在在线java文档java Doc PropertyValueFactory中说:“回调接口的方便实现,[...]”

所以我把我的代码重构成了这样的样式:

aColumn.setCellValueFactory(new PropertyValueFactory<Appointment,LocalDate>("date"));

共有1个答案

苗盛
2023-03-14

PropertyValueFactory需要正确命名的属性获取器。GetacolumnsProperty可能不是。

对于new PropertyValueFactory (“date”) partication类需要包含dateproperty()方法;返回的值需要扩展ReadOnlyProperty,这样才能正常工作,如果返回的对象WritableValue,则任何编辑都将自动导致模型的更新。

应与PropertyValueFactory<>(“日期”)一起使用的OPTION类示例:

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(),但是在这种情况下,模型中的更新在UI中是不可见的,直到它更新单元格,因为PropertyValueFactory“不知道”在哪里添加侦听器。

  • 只能在public
  • 中找到 public方法
  • PropertyValueFactory使用反射
  • 不是typesafe。在new PropertyValueFactory (“date”) 中,编译器不检查是否有适当的方法,该方法是否返回适当的类,或者例如属性getter返回字符串而不是ReadOnlyProperty ,这可能导致ClassCastExceptions.
  • 没有编译时检查。在lambda表达式中,编译器可以检查方法是否存在并返回适当的类型;对于PropertyValueFactory,这是不可能的。

如果您确信在item类中正确地实现了适当的方法,那么使用PropertyValueFactory并没有什么问题,但是如上所述,它也有缺点。此外,实现回调要灵活得多。例如,您可以做一些额外的修改:

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());
    }

});
 类似资料:
  • 问题内容: 今天,在尝试学习有关JavaFX和Java的更多信息时,我遇到了我不太了解的另一件事。 参考是以下教程(旨在将原理应用到组织者): JavaFX 8教程 我将简要概述我遇到问题的特定部分: 我的主窗口包含一个显示一些约会数据的表格视图。所以我得到了这种风格的几行(与本教程相同): 可以通过附加的EditDialog操纵数据。那很好。如果我编辑内容,则更改会立即显示,但我进行了一些其他研

  • 主要内容:Tableau的优点,Tableau的缺点Tableau的优点 Tableau的优点如下 - 数据可视化: Tableau是一种数据可视化工具,提供复杂的计算,数据混合和仪表板,用于创建漂亮的数据可视化。 快速创建交互式可视化: 用户可以使用Tableau的拖放功能创建非常交互式的可视化。 实施舒适: Tableau中提供了许多类型的可视化选项,可增强用户体验。与Python相比,Tableau非常容易学习。对编码不了解的用户也可以快速学

  • 主要内容:1) 大量的可用软件及免费软件,2) 良好的可移植性及灵活性,3) 优良的稳定性和安全性,4) 支持几乎所有的网络协议及开发语言前面章节提到,相比 Windows 系统,Linux 系统有更好的稳定性,那么除此之外,Linux 系统还有那些优点(或者不足)呢?本节带领大家详细了解一下。 1) 大量的可用软件及免费软件 Linux 系统上有着大量的可用软件,且绝大多数是免费的,比如声名赫赫的 Apache、Samba、 PHP、 MySQL 等,构建成本低廉,是 Linux 被众多企业青

  • 本文向大家介绍ant-design优点和缺点?相关面试题,主要包含被问及ant-design优点和缺点?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 优点:组件非常全面,样式效果也都比较不错。 缺点:框架自定义程度低,默认UI风格修改困难。

  • 希望这个问题证明是有建设性的,不会让我生气(“你试过谷歌吗?”)。我正慢慢地从java新手状态中爬出来,目前面临着一个需要做出的决定,即我需要为涉及测试RESTful服务的工作构建一个项目。我们有一个使用HTTPClient的内部java框架设置。然而,我读到了一些建议,其中指出,当您处理RESTful服务时,最好使用特定于REST的工具,比如Jersey。这里的一位开发人员建议我使用RestTe

  • 本文向大家介绍object-c 的优缺点 ?相关面试题,主要包含被问及object-c 的优缺点 ?时的应答技巧和注意事项,需要的朋友参考一下 objc优点: 1) Cateogies 2) Posing 3) 动态识别 4) 指标计算 5)弹性讯息传递 6) 不是一个过度复杂的 C 衍生语言 7) Objective-C 与 C++ 可混合编程 缺点: 1) 不支援命名空间 2) 不支持运算符重