This seems to rescan the whole list each time.

Overall, this whole class seems like a lot of ceremony to me to just draw the table. Although the code is "easy to understand", just maintaining 4 counters to the current row per type and doing table.getRows().get(i) would have done the trick.

I'm not saying this should be trashed, though