如何为 TableView 创建条件 CellValueFactory?

我有一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我假设它需要为工厂创建一个新的回调函数,但我不确定它是如何工作的。


HUWWW
浏览 139回答 1
1回答

catspeake

正如@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,则认为是空的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java