У меня есть общий вопрос относительно java GUI. Если у меня есть несколько компонентов, которые я хочу добавить в JFrame, должен ли я поместить их непосредственно в JFrame или добавить их в JPanel, а затем добавить панель в рамку? Почему добавление компонентов в JPanel является лучшим, почему? Обычно я это делаю, тогда я понял, что я понятия не имею, почему/если это более необязательно, а затем добавление непосредственно к фрейму. JFrame также имеет менеджеров компоновки, поэтому можно получить их в правильном положении.
Когда вы добавляете компоненты в фрейм, вы добавляете компоненты в область content pane
фрейма. Область содержимого - JPanel. Макет по умолчанию для области содержимого - BorderLayout.
Когда вы добавляете компоненты непосредственно в фрейм, вы фактически добавляете компоненты в панель. Таким образом, у вас есть все возможности компоновки панели. Таким образом, на самом деле нет никакой разницы для добавления компонентов в фрейм или использования вашей собственной панели в качестве области содержимого фрейма.
То, что вам действительно нужно решить, действительно ли вам нужно получить доступ к области контента по любой причине? Взгляните на раздел из руководства Swing по использованию контейнеров верхнего уровня для получения дополнительной информации. В учебном пособии дается некоторое представление об этой теме.
Я не уверен, почему вам нужно будет заменить компоненты области содержимого. Если вы читаете публикацию на этом форуме, рекомендуем всегда использовать CardLayout
для обмена панелями, поэтому вы никогда не будете напрямую обращаться к области содержимого.
Поскольку вы правильно упоминали, что JFrame является обычным контейнером со всеми функциями, включая Layout Manager. Если вы не планируете использовать один и тот же вид где-то в другом месте, нет причин иметь дополнительную оболочку.
JPanel
,JPanel
в том, что он упрощает повторное использование компонента, а также заменяет контейнер верхнего уровня диалогом или апплетом, если я этого захочу. КонтентJFrame
по умолчанию -BorderLayout
,JPanel
-FlowLayout
, но я редко оставляю их в такте: P