Hi,
ich habe im Internet eine Quelle gefunden, die behauptet, dass Databinding an POJOs für das TableView nicht funktioniert. Ich konnte mir nicht vorstellen, dass Oracle solche unfertigen Frameworks auf die Masse loslässt. Ist ja mehr als peinlich, wenn das stimmen sollte.
Ich habe folgende Beanklasse.
Und folgenden Controller
Das Problem ist, dass beim
die tabelle nicht aktualisiert wird. Die Daten werden gesetzt. Das sieht man aber erst, wenn eine neue Row hinzugefügt.
Also gibts wirklich keine Möglichkeit die Bean soweit zu konfigurieren, oder die tablleView, dass bei Änderungen in der Bean die tabelle automatisch aktualisiert wird. In swing hatte man zumindest fireTableEvent().
ich habe im Internet eine Quelle gefunden, die behauptet, dass Databinding an POJOs für das TableView nicht funktioniert. Ich konnte mir nicht vorstellen, dass Oracle solche unfertigen Frameworks auf die Masse loslässt. Ist ja mehr als peinlich, wenn das stimmen sollte.
Ich habe folgende Beanklasse.
Java:
public class Bean {
private final SimpleStringProperty datum = new SimpleStringProperty();
private final SimpleStringProperty von = new SimpleStringProperty();
private final SimpleStringProperty bis = new SimpleStringProperty();
private final SimpleStringProperty über = new SimpleStringProperty();
public String getDatum() {
return datum.get();
}
public void setDatum(String datum) {
this.datum.set(datum);
}
public String getVon() {
return von.get();
}
public void setVon(String von) {
this.von.set(von);
}
public String getBis() {
return bis.get();
}
public void setBis(String bis) {
this.bis.set(bis);
}
public String getÜber() {
return über.get();
}
public void setÜber(String über) {
this.über.set(über);
}
}
Und folgenden Controller
Java:
public class MainController implements Initializable {
@FXML // fx:id="tabelle"
private TableView<Bean> tabelle; // Value injected by FXMLLoader
@FXML // fx:id="datumCol"
private TableColumn<Bean, String> datumCol; // Value injected by FXMLLoader
@FXML // fx:id="vonCol"
private TableColumn<Bean, String> vonCol; // Value injected by FXMLLoader
@FXML // fx:id="bisCol"
private TableColumn<Bean, String> bisCol; // Value injected by FXMLLoader
@FXML // fx:id="überCol"
private TableColumn<Bean, String> überCol; // Value injected by FXMLLoader
@FXML // fx:id="ende"
private Button ende; // Value injected by FXMLLoader
// Handler for Button[fx:id="ende"] onAction
public void ende(ActionEvent event) {
Bean selectedItem = tabelle.getSelectionModel().getSelectedItem();
if (selectedItem != null) {
selectedItem.setBis(rangeDate(new Date()));
}
}
private String rangeDate(Date date) {
return new SimpleDateFormat("HH:mm:ss").format(date).toString();
}
@Override // This method is called by the FXMLLoader when initialization is complete
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
// initialize your logic here: all @FXML variables will have been injected
datumCol.setCellValueFactory(new PropertyValueFactory<Bean, String>("datum"));
vonCol.setCellValueFactory(new PropertyValueFactory<Bean, String>("von"));
bisCol.setCellValueFactory(new PropertyValueFactory<Bean, String>("bis"));
überCol.setCellValueFactory(new PropertyValueFactory<Bean, String>("über"));
}
}
Das Problem ist, dass beim
Java:
selectedItem.setBis(rangeDate(new Date()));
die tabelle nicht aktualisiert wird. Die Daten werden gesetzt. Das sieht man aber erst, wenn eine neue Row hinzugefügt.
Also gibts wirklich keine Möglichkeit die Bean soweit zu konfigurieren, oder die tablleView, dass bei Änderungen in der Bean die tabelle automatisch aktualisiert wird. In swing hatte man zumindest fireTableEvent().