Hallo zusammen,
ich stehe wieder vor ein wahrscheinlich simples Problem, bei der ich nicht weiß wie man es schöner implementieren kann, eventuell kann mir jemand, ich will die enable%TYP%ColumnEdit Methode für mehrere Typen anbieten, bisher war es immer so dass es immer an zwei Stellen anders wie bei den anderen Methoden sind. Zum Einen die #fromString und die Stelle wo das Argument dem Consumer übergeben wird.
Ungefähr 5-8 Methoden gleicher Aufbau ist doch quatsch oder?
ich stehe wieder vor ein wahrscheinlich simples Problem, bei der ich nicht weiß wie man es schöner implementieren kann, eventuell kann mir jemand, ich will die enable%TYP%ColumnEdit Methode für mehrere Typen anbieten, bisher war es immer so dass es immer an zwei Stellen anders wie bei den anderen Methoden sind. Zum Einen die #fromString und die Stelle wo das Argument dem Consumer übergeben wird.
Code:
public void enableLongColumnEdit(int columnIndex, Consumer<EditData<T, Long>> consumer) {
findColumn(columnIndex).setCellFactory(TextFieldTableCell.forTableColumn(new StringConverter() {
@Override
public String toString(Object object) {
return object.toString();
}
@Override
public Object fromString(String string) {
return Long.parseLong(string);
}
}));
findColumnByIndex(columnIndex).setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<T,Object>>() {
@Override
public void handle(CellEditEvent<T, Object> event) {
Object newValue = event.getNewValue();
T row = event.getTableView().getItems(). get(event.getTablePosition().getRow());
consumer.accept(new EditData<>(row, Long.parseLong(newValue.toString())));
}
});
}
public void enableDoubleColumnEdit(int columnIndex, Consumer<EditData<T, Double>> consumer) {
findColumn(columnIndex).setCellFactory(TextFieldTableCell.forTableColumn(new StringConverter() {
@Override
public String toString(Object object) {
return object.toString();
}
@Override
public Object fromString(String string) {
return Double.parseDouble(string);
}
}));
findColumnByIndex(columnIndex).setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<T,Object>>() {
@Override
public void handle(CellEditEvent<T, Object> event) {
Object newValue = event.getNewValue();
T row = event.getTableView().getItems(). get(event.getTablePosition().getRow());
consumer.accept(new EditData<>(row, Double.parseDouble(newValue.toString())));
}
});
}
public void enableStringColumnEdit(int columnIndex, Consumer<EditData<T, String>> consumer) {
findColumn(columnIndex).setCellFactory(TextFieldTableCell.forTableColumn());
findColumnByIndex(columnIndex).setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<T,Object>>() {
@Override
public void handle(CellEditEvent<T, Object> event) {
Object newValue = event.getNewValue();
T row = event.getTableView().getItems(). get(event.getTablePosition().getRow());
consumer.accept(new EditData<>(row, String.valueOf(newValue)));
}
});
}
public TableColumn<T, Object> findColumnByIndex(int index){
return (TableColumn<T, Object>) tableView.getColumns().get(index);
}
Ungefähr 5-8 Methoden gleicher Aufbau ist doch quatsch oder?