- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
(在 this 问题之后,这就是提示它的原因)
我有一个模型类 LongProperty
:
public class Model {
private final SimpleLongProperty number = new SimpleLongProperty(this, "number");
public long getNumber() { return number.get(); }
public void setNumber(long number) { this.number.set(number); }
public LongProperty numberProperty() { return number; }
}
现在,在我的 Controller 中我有一个 TableColumn<Model, Long> colNumber
我想绑定(bind)到这个属性。我知道我可以使用 PropertyValueFactory
,但我不喜欢当我可以以编程方式传递属性时按名称给出属性,并让编译器/ide 对我进行拼写检查。基本上我想做这样的事情(我实际上想让它更简洁,最后的例子):
colNumber.setCellValueFactory( cdf -> cdf.getValue().numberProperty() );
但这给了我一个编译错误:
java: incompatible types: bad return type in lambda expression javafx.beans.property.ObjectProperty cannot be converted to javafx.beans.value.ObservableValue
正如我所说,我知道我可以使用 PropertyValueFactory
,并且还有属性名称的静态最终字符串,但我发现它不太优雅。有没有办法让这种程序化方法发挥作用?一些施法魔法?
附录:
我想要的实际方法是使用辅助方法:
private <S,T> Callback<CellDataFeatures<S,T>, ObservableValue<T>> propertyFactory(Callback<S, ObservableValue<T>> callback) {
return cdf-> callback.call(cdf.getValue());
}
然后我就可以使用
colNumber.setCellValueFactory(propertyFactory(Model::numberProperty));
这使我的代码非常简洁和可读,并且编译器会检查我是否有拼写错误等。
最佳答案
你可以做到
colNumber.setCellValueFactory( cdf -> cdf.getValue().numberProperty().asObject() );
我认为(我需要测试,但这似乎是正确的)您还可以利用模型中的自动装箱和拆箱功能,并将该属性实现为 ObjectProperty<Long>
:
public class Model {
private final ObjectProperty<Long> number = new SimpleObjectProperty<>(this, "number", 0L);
public long getNumber() { return number.get(); }
public void setNumber(long number) { this.number.set(number); }
public ObjectProperty<Long> numberProperty() { return number; }
}
这种方法的一个缺点是它不允许任何算术绑定(bind),例如你做不到 someValue.bind(model.numberProperty().multiply(2));
等等(另一个是你可能会无意中调用model.numberProperty().set(null);
,并造成各种破坏。)
当然,另一种解决方案是将表格列设为 TableColumn<Model, Number>
,但可能还有其他原因不这样做。
FWIW,我绝对主张避免 PropertyValueFactory
。这是 JavaFX 2.0 中引入的一个便利类(即在 lambda 之前),当时实现允许编译器检查的回调非常冗长。现在它基本上是多余的(并且应该被弃用,恕我直言,或者至少应该实现您概述的那种实用方法)。
关于java - 以编程方式(与语义方式)将 LongProperty 应用于 TableColumn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34621485/
(在 this 问题之后,这就是提示它的原因) 我有一个模型类 LongProperty : public class Model { private final SimpleLongProp
我可以将 Java Atomic 类与 javafx2 NumberProperty 一起使用吗? 因为我想将 AtomicLong 与 LongProperty 一起使用。 更新 我想更新javaf
我遇到了 JavaFX API 中的一个特点:LongProperty工具 Property , 但不是 Property . 这是什么原因?我觉得这一切都源于 Java 固有的协变和逆变问题,因为泛
我是一名优秀的程序员,十分优秀!