Before you start from scratch, let me point to the Desktop Components project. It already supports a table view with columns, but indeed, it is based on rows.
From a design perspective, I get that using roles may be the better design for many situations. Often (not always), the items on a single row in a table really just represent aspects of a single underlying item. For instance, if you are displaying contacts, all the items in the columns (name, d.o.b., phone number) represent aspects or attributes of a single entity: the person. That makes it logical to be able to treat them as such. Representing such information as a table model, pre-supposes that you want to display such information always in a table form. That may not be the case. Perhaps you want to use a representation that looks like a set of business cards instead, for instance. Having the model in the form of a table would then be harder to use. Using a table to represent objects with a number of attributes is one way to represent them, but not the only way.