将数据放入TableView

时间:2017-09-30 15:52:51

标签: java intellij-idea javafx

解决:

  

PropertyValueFactory需要Property()方法   返回属性,而不是存储在属性

中的值

我的问题是:

我正在制作一个使用TableView的应用程序。每次选择TableView中的项目时,ListView都会更新。问题是,每次点击ListView中的某个项目时,TableView都没有任何结果。

关于TableView的简短代码:

private TableView<Gebruik> tableView;

tableView = new TableView<>();
TableColumn<Gebruik, String> clmDatum = new TableColumn<Gebruik, String>("Datum");
TableColumn<Gebruik, String> clmBoek = new TableColumn<Gebruik, String>("Boek");
TableColumn<Gebruik, String> clmFouten = new TableColumn<Gebruik, String>("Aantal fouten");
TableColumn<Gebruik, String> clmJuisten = new TableColumn<Gebruik, String>("Aantal juist");

clmDatum.setCellValueFactory(new PropertyValueFactory<Gebruik,String>("datum"));
clmBoek.setCellValueFactory(new PropertyValueFactory<Gebruik,String>("boek"));
clmFouten.setCellValueFactory(new PropertyValueFactory<Gebruik,String>("fouten"));
clmJuisten.setCellValueFactory(new PropertyValueFactory<Gebruik,String>("juisten"));

tableView.getColumns().addAll(clmDatum,clmBoek,clmFouten,clmJuisten);

Gebruik课程: 这个类有一些我认为与TableView中的列匹配的属性吗?

package Views.Menu.Profiel;

import javafx.beans.property.SimpleStringProperty;

public class Gebruik {

    private final SimpleStringProperty datum;
    private final SimpleStringProperty boek;
    private final SimpleStringProperty fouten;
    private final SimpleStringProperty juisten;

    Gebruik(String datum, String juisten, String fouten, String boek) {
        this.datum = new SimpleStringProperty(datum);
        this.boek = new SimpleStringProperty(boek);
        this.fouten = new SimpleStringProperty(fouten);
        this.juisten = new SimpleStringProperty(juisten);
    }

    public String datumProperty() {
        return datum.get();
    }

    public String boekProperty() {
        return boek.get();
    }

    public String foutenProperty() {
        return fouten.get();
    }

    public String juistenProperty() {
        return juisten.get();
    }

    public void setDatum(String datum) {
        this.datum.set(datum);
    }

    public void setBoek(String boek) {
        this.boek.set(boek);
    }

    public void setFouten(String fouten) {
        this.fouten.set(fouten);
    }

    public void setJuisten(String juisten) {
        this.juisten.set(juisten);
    }
}

我的ChangeListener: 每当选择ListView的项目时,我都会读取文本文件。在我读取文件(与ListView中的项目对应)后,我以一种可以制作Gebruik对象的方式分割数据。这些对象将放在observableArrayList()obsGebruik

view.getListView().getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {
        @Override
        public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
            ObservableList<Gebruik> obsGebruik = FXCollections.observableArrayList();

            String dir = System.getProperty("user.home");
            Path path = Paths.get(dir + "/Al Arabia.jar/AppData/Save/dataSave/" + newValue + ".txt");

            try {
                List<String> lines = new ArrayList<>();
                lines = Files.readAllLines(path, Charset.defaultCharset());
                String[] gegevens = lines.toString().replace("]","").replace("[","").replace(",","").split("---");

                for (String s : gegevens){
                    String[] gegevens2 = s.split("\t");
                    obsGebruik.add(new Gebruik(gegevens2[0],gegevens2[1],gegevens2[2],gegevens2[3]));
                }

            } catch (IOException e) {
                e.printStackTrace();
            }

            view.getTableView().setItems(obsGebruik);
        }
    });

0 个答案:

没有答案