Рисование графики и размещение ее внутри панели с помощью BorderLayout

1
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

Изображение 174551

  • 0
    Добавьте panel в центр и посмотрите, что получится
  • 0
    Панель @peeskillet в ЦЕНТРЕ
Показать ещё 2 комментария
Теги:
swing
jpanel
border-layout

2 ответа

4
Лучший ответ

"Я хочу, чтобы графический объект отображался в центре 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. Центр останется для всего остального.

  • 1
    (plus1) для переопределения getPreferredSize() и без использования setPreferredSize ().
1

Вы размещаете свою панель в кадре СЕВЕР. На севере ваша панель будет занимать только ширину вдов. Поэтому он не имеет высоты (или высоты 1px).

Поэтому попробуйте определить размер вашей панели:

panel.setPreferedSize(new Dimension(200, 200));

В противном случае, как указано в комментарии, поместите вашу панель в ЦЕНТР кадра.

Заменить:

frame.add(panel,BorderLayout.NORTH);

от

frame.add(panel,BorderLayout.CENTER);

В центре ваша панель получит ширину и высоту панели (выровняйте высоту вашей кнопки).

  • 0
    Спасибо, я думал, что панель автоматически подстраивается под размер графики. Установка размера панели решила мою проблему.
  • 0
    @ user3922757, не используйте метод setPreferredSize (). Вместо этого вы должны переопределить метод getPreferredSize() вашей пользовательской панели. Только панель должна знать о правильном предпочтительном размере компонента. Кроме того, не забудьте «принять» ответ, чтобы люди знали, что проблема была решена.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню