JavaFx TableView cellFactory内存开销

时间:2017-12-08 12:03:57

标签: javafx tableview

我的问题与JavaFx中的TableView有关。 JavaFx建议使用Properties来存储将在表中显示的值(SimpleSttringProperty等),如下例所示。

这不是Java的内存开销(为每个单元创建另一个对象)吗? 我将使用TableView从数据库中显示超过10.000行。 有没有办法避免这种情况,只是像Swing之前做的那样工作? TableView不能只获取代表的值吗? 对于所有解决方案,我发现每个单元格都需要一个ObservableValue,这可能需要大量内存。

TableColumn<Person,String> firstNameCol = new TableColumn<Person,String>("First Name");
firstNameCol.setCellValueFactory( element -> element.getValue().firstName );
or 
firstNameCol.setCellValueFactory( new PropertyValueFactory<Person, String>("firstName"));
public static class Person {

    public final SimpleStringProperty firstName;
    private final SimpleStringProperty lastName;
    private final SimpleStringProperty email;

    private Person(String fName, String lName, String email) {
        this.firstName = new SimpleStringProperty(fName);
        this.lastName = new SimpleStringProperty(lName);
        this.email = new SimpleStringProperty(email);
    }

1 个答案:

答案 0 :(得分:0)

您不需要在模型中使用属性。这是一个例子

public class Person {

    private String firstName;
    private String lastName;
    private String email;

    public Person() {
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

只需在需要时创建属性。

firstNameCol.setCellValueFactory(cdf -> new SimpleStringProperty(cdf.getValue().getFirstName()));