GridLayout будет растягивать компонент в каждой ячейке, чтобы соответствовать размеру ячейки. Если вы хотите избежать этого растяжения, добавьте кнопки на другую панель и добавьте эту панель к GridLayout
.
Разработка моего пользовательского интерфейса на Java, по моему опыту, сводится к смешиванию и подгонке менеджеров компоновки для достижения вашей общей цели. Есть несколько упрощенных менеджеров, таких как Mig Layout
Для вашего примера я бы сделал что-то вроде этого:
+----------------------------------------+
| panel1 |
|+--------------------------------------+|
|| panel2 ||
|+--------------------------------------+|
+----------------------------------------+
+----------------------------------------+
| panel3 |
|+-----------++-----------++------------+|
|| panel4 || panel5 || panel6 ||
|+-----------++-----------++------------+|
+----------------------------------------+
panel1
имеет BorderLayout
panel2
это ваш ImagePanel
и добавлен к panel1
через panel1.add(panel2, BorderLayout.CENTER);
panel3
это ваш GridLayout
.
panel4
, panel5
и panel6
- все по умолчанию (FlowLayout
), и каждый из этих JPanel
s будет содержать одну из ваших трех кнопок.
Затем вы можете добавить это на панель содержимого, установив для него Layout значение BorderLayout
и добавив panel1
через getContentPane().add(panel1, BorderLayout.NORTH);
и panel3
через getContentPane().add(panel3, BorderLayout.SOUTH);
Он не идеален, но он сделает ваш образ чище. Вы можете добавить гораздо больше, чтобы все выглядело лучше. Один из моих любимых менеджеров по раскладке - BoxLayout
.