gpt4 book ai didi

JavaFX - TableView - 字段的变化和该字段的字段

转载 作者:行者123 更新时间:2023-11-29 08:42:52 25 4
gpt4 key购买 nike

我处于以下情况。我有一个 TableView填充了来自模型类 Foo 的数据:

public class Foo {
private StringProperty someText;
private Bar someObject;

// getters, setters and properties dropped for clarity
}

这个类有一个Bar类型的字段:

public class Bar {
private StringProperty someText;

// getters, setters and properties dropped for clarity
}

其中一列必须显示 Bar 的 someText 中的文本。所以我将该 StringProperty 绑定(bind)到该列。

但是当 Foo 中的整个 Bar 对象被另一个替换时,表也应该更新。因此,我在包含 Bar 的 Foo 中创建了一个 ObjectProperty,并将该属性绑定(bind)到该列。当然,现在它不再监听 Bar 的 someText 的变化。

我如何获得这些解决方案的“组合”,以便表格监听对象本身及其字段的变化?

最佳答案

仅使用 JavaFX API,您就可以做到

TableColumn<Foo, String> barColumn = new TableColumn<>("Bar");

barColumn.setCellValueFactory(cellData ->
Bindings.selectString(cellData.getValue().barProperty(), "someText"));

出于几个原因,我不太喜欢 API 的那部分。首先,没有编译时检查:您只需提供字符串形式的属性名称,因此如果您有拼写错误,它只会在运行时显示出来。其次,如果 foo.getBar() 返回 null(它将在表格单元格中),这会向 stderr 生成一堆警告。这些很烦人(它们不会阻止任何运行),而且真的不应该存在,因为根据 API 文档,这是一个受支持的用例。但是,它会起作用。


要获得更健壮且更少遗留风格的实现,您可以使用 Tomas Mikula 的 ReactFX library ,版本 2.0 或更高版本,其中包括对此类绑定(bind)的支持。使用那个库你会做

barColumns.setCellValueFactory(cellData -> 
Val.flatMap(cellData.getValue().barProperty(), Bar::someTextProperty));

这有编译时检查和类型检查等,没有虚假警告。

关于JavaFX - TableView - 字段的变化和该字段的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38921635/

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