如何在javafx中编辑表?

时间:2018-06-20 02:40:37

标签: java javafx

目的:浏览并选择一个文件夹。并在列中添加其属性。

例如,文件夹的名称在名称列中,位置在位置中,依此类推。

由于某种原因,我无法将所选文件夹的属性添加到名为folderTable的表中。该程序似乎知道在添加文件夹后第一行中有内容,但它不显示文件夹本身。

我正在学习,因此能获得任何帮助。

attack type

1 个答案:

答案 0 :(得分:0)

TableView使用Properties and Bindings在每一列中显示数据。您在列上安装了CellValueFactory,但是正在使用PropertyValueFactory填充它。

这是正确的方法,但是syncedFolders类存在问题。 PropertyValueFactory调查您的syncedFolders类,并尝试查找具有您指定名称的Property。问题是您没有定义任何属性:

private String name, location, dateModified;
private double size;

这些是字段,而不是属性。

您将需要重写syncedFolders类,使其具有可观察的属性,如下所示:

private SimpleStringProperty name = new SimpleStringProperty();

针对每个字段执行此操作,更新构造函数和设置器/获取器,然后重试!

public class syncedFolders {

    private SimpleStringProperty name = new SimpleStringProperty();
    private SimpleStringProperty location = new SimpleStringProperty();
    private SimpleStringProperty dateModified = new SimpleStringProperty();
    private SimpleDoubleProperty size = new SimpleDoubleProperty();

    public syncedFolders(
            String name,
            String location,
            String dateModified,
            double size) {

        this.name.set(name);
        this.location.set(location);
        this.dateModified.set(dateModified);
        this.size.setValue(size);
    }

    public String getName() {
        return name.get();
    }

    public SimpleStringProperty nameProperty() {
        return name;
    }

    public void setName(String name) {
        this.name.set(name);
    }

    public String getLocation() {
        return location.get();
    }

    public SimpleStringProperty locationProperty() {
        return location;
    }

    public void setLocation(String location) {
        this.location.set(location);
    }

    public String getDateModified() {
        return dateModified.get();
    }

    public SimpleStringProperty dateModifiedProperty() {
        return dateModified;
    }

    public void setDateModified(String dateModified) {
        this.dateModified.set(dateModified);
    }

    public double getSize() {
        return size.get();
    }

    public SimpleDoubleProperty sizeProperty() {
        return size;
    }

    public void setSize(double size) {
        this.size.set(size);
    }
}

编辑:

我还建议更改表格的填充方式。您当前的addFolder()方法是将该项直接添加到表的items属性中,但实际上您应该将它们添加到设置为表项的基础ObservableList上:

public void addFolder() {

    round(printSize, 1);
    folderTable.setItems(getSyncedFolders());
    folderTable.getItems().add(new syncedFolders(name, location, dateModified, tempSize));
}

folderTable.setItems()的工作方式是将列表绑定到TableView。但是,我的意思是对列表所做的任何更改都会自动反映在TableView中;您完全不需要使用folderTable.getItems().add()