public MyLayout (){
frame.setLayout(new BorderLayout());
panel.setLayout(new BorderLayout());
panel.add(new GraphicsSurface(),BorderLayout.CENTER);
frame.add(panel,BorderLayout.NORTH);
frame.add(btn1,BorderLayout.SOUTH);
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
Я создаю графику, размещая ее внутри панели
panel.add(new GraphicsSurface(),BorderLayout.CENTER);
и размещение этой панели внутри JFrame
frame.add(panel,BorderLayout.NORTH);
Кроме того, что изображение отображается вне JFrame
"Я хочу, чтобы графический объект отображался в центре JFrame. У меня все еще есть компоненты для рекламы",
В GraphicsSurface
переопределите getPreferredSize
и придайте ему размер, который вы хотите (я думаю, размер часов
class GraphicsSurface extends JPanel {
@Override
public Dimension getPreferredSize() {
return new Dimenstion(..., ...);
}
}
Для panel
не устанавливайте макет. По умолчанию FlowLayout
будет работать отлично (он также центрируется по умолчанию -yeeee!). Что произойдет, так это то, что GraphicsSurface
сохранит свой предпочтительный размер, так как FlowLayout
будет его уважать. Затем panel
будет растянута до ширины рамки (высота будет оставаться высотой GraphicsSurface
), а GraphicsSurface
будет центрироваться на panel
С этим вы должны быть в порядке, добавив panel
в рамку NORTH
. Центр останется для всего остального.
getPreferredSize()
и без использования setPreferredSize ().
Вы размещаете свою панель в кадре СЕВЕР. На севере ваша панель будет занимать только ширину вдов. Поэтому он не имеет высоты (или высоты 1px).
Поэтому попробуйте определить размер вашей панели:
panel.setPreferedSize(new Dimension(200, 200));
В противном случае, как указано в комментарии, поместите вашу панель в ЦЕНТР кадра.
Заменить:
frame.add(panel,BorderLayout.NORTH);
от
frame.add(panel,BorderLayout.CENTER);
В центре ваша панель получит ширину и высоту панели (выровняйте высоту вашей кнопки).
getPreferredSize()
вашей пользовательской панели. Только панель должна знать о правильном предпочтительном размере компонента. Кроме того, не забудьте «принять» ответ, чтобы люди знали, что проблема была решена.
panel
в центр и посмотрите, что получится