Добавить компоненты непосредственно в JFrame или поместить их в JPanel?

1

У меня есть общий вопрос относительно java GUI. Если у меня есть несколько компонентов, которые я хочу добавить в JFrame, должен ли я поместить их непосредственно в JFrame или добавить их в JPanel, а затем добавить панель в рамку? Почему добавление компонентов в JPanel является лучшим, почему? Обычно я это делаю, тогда я понял, что я понятия не имею, почему/если это более необязательно, а затем добавление непосредственно к фрейму. JFrame также имеет менеджеров компоновки, поэтому можно получить их в правильном положении.

  • 7
    Вообще говоря, я предпочитаю всегда создавать свой пользовательский интерфейс на основе JPanel , JPanel в том, что он упрощает повторное использование компонента, а также заменяет контейнер верхнего уровня диалогом или апплетом, если я этого захочу. Контент JFrame по умолчанию - BorderLayout , JPanel - FlowLayout , но я редко оставляю их в такте: P
  • 3
    Мне также нравится работать с небольшими функциональными единицами, поэтому вместо того, чтобы создавать один «большой» компонент, я делаю несколько маленьких, которые (насколько это возможно) самодостаточны, которые затем я могу встроить в большую единицу работы, как лего;)
Теги:
user-interface
swing
jpanel
jframe

2 ответа

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

Когда вы добавляете компоненты в фрейм, вы добавляете компоненты в область content pane фрейма. Область содержимого - JPanel. Макет по умолчанию для области содержимого - BorderLayout.

Когда вы добавляете компоненты непосредственно в фрейм, вы фактически добавляете компоненты в панель. Таким образом, у вас есть все возможности компоновки панели. Таким образом, на самом деле нет никакой разницы для добавления компонентов в фрейм или использования вашей собственной панели в качестве области содержимого фрейма.

То, что вам действительно нужно решить, действительно ли вам нужно получить доступ к области контента по любой причине? Взгляните на раздел из руководства Swing по использованию контейнеров верхнего уровня для получения дополнительной информации. В учебном пособии дается некоторое представление об этой теме.

Я не уверен, почему вам нужно будет заменить компоненты области содержимого. Если вы читаете публикацию на этом форуме, рекомендуем всегда использовать CardLayout для обмена панелями, поэтому вы никогда не будете напрямую обращаться к области содержимого.

1

Поскольку вы правильно упоминали, что JFrame является обычным контейнером со всеми функциями, включая Layout Manager. Если вы не планируете использовать один и тот же вид где-то в другом месте, нет причин иметь дополнительную оболочку.

Ещё вопросы

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