Используйте LayoutManager, который поддерживает ваши потребности, это путь. Продвинутые менеджеры позволяют определять группы (из столбцов / строк), размер которых всегда равен ширине / высоте. Если основные менеджеры не допускают таких семантических спецификаций, обратитесь к стороннему менеджеру, например любой из BigThree: MigLayout, FormLayout или DesignGridLayout. Время, потраченное на обучение, будет хорошо потрачено: -)
В MigLayout (мой личный любимый в настоящее время) противопоказанием является «sizegroup groupName» или «sg groupName» (где groupName может быть пустым, если есть только в группе), f.i.
JButton button = new JButton("somesize");
JLabel label = new JLabel("--outer--");
MigLayout layout = new MigLayout("debug, wrap 3",
"[sizegroup, grow][center][sizegroup, grow]");
JComponent comp = new JPanel(layout);
// start adding component in second column
comp.add(button, "cell 1 0");
comp.add(label);
// add something spanning all column in second row for comparison
comp.add(new JButton("somesize"), "span 3, center");