Now you can use Grid:

HeaderRow groupingHeader = grid.prependHeaderRow();
HeaderCell namesCell = groupingHeader.join(
groupingHeader.getCell("firstname"),
groupingHeader.getCell("lastname"));
HeaderCell yearsCell = groupingHeader.join(
groupingHeader.getCell("born"),
groupingHeader.getCell("died"),
groupingHeader.getCell("lived"));
This example is taken from the Vaadin Book . Just to show that the new Vaadin 7.5 (and above) can build a table with a complex heading (merged columns). Another good resource is in the Vaadin Wiki .
, .