为了账号安全,请及时绑定邮箱和手机立即绑定

如何为 TableView 创建条件 CellValueFactory?

如何为 TableView 创建条件 CellValueFactory?

HUWWW 2021-10-28 15:40:27
我有一TableView列需要显示来自我的数据对象的两个值之一。在下面的 MCVE 中,我有一个Person可能有也可能没有nickname属性的对象。这nickname可以是填充的、空的或null.人.java:import javafx.beans.property.IntegerProperty;import javafx.beans.property.SimpleIntegerProperty;import javafx.beans.property.SimpleStringProperty;import javafx.beans.property.StringProperty;public class Person {    private IntegerProperty id = new SimpleIntegerProperty();    private StringProperty firstName = new SimpleStringProperty();    private StringProperty lastName = new SimpleStringProperty();    private StringProperty nickname = new SimpleStringProperty();    public Person(int id, String firstName, String lastName, String nickname) {        this.id.set(id);        this.firstName.set(firstName);        this.lastName.set(lastName);        this.nickname.set(nickname);    }    public int getId() {        return id.get();    }    public IntegerProperty idProperty() {        return id;    }    public void setId(int id) {        this.id.set(id);    }    public String getFirstName() {        return firstName.get();    }    public StringProperty firstNameProperty() {        return firstName;    }    public void setFirstName(String firstName) {        this.firstName.set(firstName);    }    public String getLastName() {        return lastName.get();    }    public StringProperty lastNameProperty() {        return lastName;    }    public void setLastName(String lastName) {        this.lastName.set(lastName);    }    public String getNickname() {        return nickname.get();    }    public StringProperty nicknameProperty() {        return nickname;    }    public void setNickname(String nickname) {        this.nickname.set(nickname);    }}我需要的是一个如果它有一个值CellValueFactory就会使用这个nickname属性,但是这个人的完整名字和姓氏如果nickname是空的或空的。如何创建条件CellValueFactory?我假设它需要为工厂创建一个新的回调函数,但我不确定它是如何工作的。
查看完整描述

1 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

正如@kleopatra 所暗示的那样,一种方法是在cellValueFactory. 这是通过Bindings.when(ObservableBooleanValue).


nameCol.setCellValueFactory(features -> {

  var firstName = features.getValue().firstNameProperty();

  var lastName  = features.getValue().lastNameProperty();

  var nickname  = features.getValue().nicknameProperty();


  return Bindings.when(nickname.isEmpty())

      .then(firstName.concat(" ").concat(lastName))

      .otherwise(nickname);

});

该isEmpty()绑定认为null值是空的。


注意:如果 this 的StringExpression值为null,则认为是空的。


查看完整回答
反对 回复 2021-10-28
  • 1 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信