| Semester_Vaadin |
|---|
| 01_StartProject |
| 02_Component |
| 03_Layout |
| 04_Basiklasse |
| 05_Serviceklasse |
| 06_GridSimple |
| 07_Event |
| 08_Exception |
| 09_Grid_Manuell |
| 10_Delete |
| 11_Validation |
| 12_Insert |

private final Grid<Urlaub> grid = new Grid<>(Urlaub.class, false);
autoCreateColumn = false
Dem grid werden die Spalten nicht automatisch zugewiesen.
grid.addColumn(new ValueProvider<Urlaub, Long>() {
@Override
public Long apply(Urlaub urlaub) {
return urlaub.getUrlaubId();
}
})
.setHeader("Urlaub ID")
.setSortable(true);
grid.addColumn(urlaub -> urlaub.getLand())
.setHeader("Urlaubsland")
.setSortable(true);
grid.addColumn(Urlaub::getOrt)
.setHeader("Urlaubort")
.setSortable(true);
Variante 1 - mit anonymer Klasse: - Alte Schreibweise, bevor Java Lambdas hatte. - Man schreibt eine anonyme Klasse, die ValueProvider<T, R> implementiert und die apply(…)-Methode überschreibt. - Sehr ausführlich, aber am kompatibelsten (funktioniert auch in alten Java-Versionen < 8). - Die Komponenten werden als Eigenschaft definiert.
Variante 2 - mit Lambda: - Kürzer, moderner: urlaub -> urlaub.getLand() ist ein Lambda-Ausdruck. - Funktional identisch mit Variante 1. - Lesbarer und weniger Boilerplate.
Variante 3 - mit Method Reference: - Noch kürzer: nutzt eine Methodenreferenz (Urlaub::getOrt). - Automatisch dasselbe wie urlaub -> urlaub.getOrt(). - Am saubersten und übersichtlichsten, solange die Methode direkt aufgerufen werden kann.
grid.addColumn(Urlaub::getAllInclusive)
.setHeader("All INCLUSIVE")
.setSortable(true);
grid.addColumn(urlaub -> {return urlaub.getAllInclusive() ? "Y":"N"; })
.setHeader("All INCLUSIVE")
.setSortable(true);
grid.addComponentColumn(new ValueProvider<Urlaub, Component>() {
@Override
public Component apply(Urlaub urlaub) {
Checkbox cb;
cb = new Checkbox(urlaub.getAllInclusive().booleanValue());
cb.setReadOnly(true);
return cb;
}
})
.setHeader("All INCLUSIVE")
.setSortable(false);
Die erste Variante liefer true/false. Die zweite Variante prüft mit einer if Abfrage und liefert “Y”/“N”. Die dritte Variante liefert eine CheckBox. Diese Variante ist nicht sortierbar!

HorizontalLayout header = new HorizontalLayout();
Image icon = new Image("images/logo_sm.png", "Icon");
icon.setWidth("32px");
Span text = new Span("Art");
header.add(icon, text);
grid.addColumn(Urlaub::getUrlaubArt).setHeader(header).setSortable(true);
Der header beinhaltet sowohl ein Bild als auch einen Text. Dazu wird wieder das HorizontalLayout verwendet.
