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);
}
});