Я не использую макет,
Да, вы. По умолчанию JPanel использует FlowLayout.
однако я попытался решить эту проблему с помощью FlowLayout, но ничего не изменилось.
Это потому, что по умолчанию FlowLayout использует 5-пиксельный зазор вокруг любого компонента, добавляемого на панель.
Вы должны использовать:
menu.setLayout( new FlowLayout(...) );
Прочитайте API FlowLayout для соответствующего конструктора, который позволит вам использовать 0 для горизонтального и / или вертикального разрыва.
frame.add(menu);
frame.add(content);
Кроме того, по умолчанию панель содержимого фрейма использует BorderLayout, поэтому вы должны использовать:
frame.add(menu, BorderLayout.PAGE_START);
frame.add(content, BorderLayout.CENTER);
Вы не должны пытаться контролировать размер кнопки:
//home.setPreferredSize(dim);
//home.setMinimumSize(dim);
//home.setMaximumSize(dim);
Просто установите текст кнопки или добавьте значок к кнопке, и кнопка определит свой предпочтительный размер.
Кроме того, вы действительно должны называть свою панель меню панелью инструментов. Swing уже поддерживает меню, и есть специальный способ добавить строку меню в рамку. Прочитайте раздел из руководства по Swing на Как использовать меню для получения дополнительной информации.