If the number of rows is larger than 0, the number of columns specified is ignored and instead there will be "(ncomponents + nrows - 1) / nrows" columns, where ncomponents is the number of components and nrows is the number of rows. In your code, ncomponents is 3 and nrows is 2, so the number of columns will be 2.
This is also mentioned in the API:
When both the number of rows and the number of columns have been set to non-zero values, either by a constructor or by the setRows and setColumns methods, the number of columns specified is ignored. Instead, the number of columns is determined from the specified number of rows and the total number of components in the layout.
So if you want to use a fixed number of columns, just set the number of rows to 0. It will then respect the column count and just keep filling until all components are put in place.