Я пытаюсь настроить отступ для jpanel, который он имеет внутри GridLayout
//b.setMargin(buttonMargin);
//b.setBorder(null);
//b.setBorderPainted(false);
Я не думаю, что вам нужен весь этот код.
Вместо этого просто установите Border кнопки:
b.setBorder( new EmptyBorder(5, 5, 5, 5) );
Edit:
frame.getContentPane().add(new ImagePanel(...));
…
frame.add(chessBoard);
Прежде всего, frame.getContentPane().add(…)
и frame.add(…)
- это одно и то же. То есть компонент будет добавлен на панель содержимого. Второй формат - это просто ярлык для первого.
Итак, вы пытаетесь добавить два компонента в BorderLayout.CENTER. Это не сработает, поскольку BorderLayout будет поддерживать только один компонент в любом месте.
Swing был разработан с отношениями родитель / потомок, поэтому, похоже, вам нужно что-то вроде:
- JFrame (панель содержимого)
Итак, ваш лог c должен выглядеть примерно так:
ImagePanel background = new ImagePanel(…);
background.setLayout( new BorderLayout() );
background.add(chessPanel, BorderLayout.CENTER);
frame.add(background, BorderLayout.CENTER);
Теперь вы иметь отношения родитель / потомок между компонентами.
frame.setSize(800, 800);
Не устанавливать размер рамки. (800, 800) неправильный размер. Если ваш ImagePanel имеет размер (800, 800), тогда фрейм должен быть больше, потому что фрейм также включает в себя строку заголовка и границу.
Таким образом, вместо вашего logi c должно быть:
frame.pack();
frame.setVisible(true);
Метод pack () позволит фрейму определять свой собственный предпочтительный размер ПОСЛЕ того, как в фрейм добавлены все компоненты.
Примечание:
В вашем классе ImagePanel вам также потребуется реализовать метод getPreferresSize()
вашего изображения. Это позволит методу pack () работать правильно. Прочтите раздел из учебника Swing на Custom Painting для рабочего примера.