Всегда ли мне нужна JPanel? - PullRequest
       140

Всегда ли мне нужна JPanel?

0 голосов
/ 05 августа 2020

Я сейчас пишу простой код GUI для запуска окна игры. Мне нужно только сообщение о запуске игры и кнопка запуска в окне. Но у меня есть запутанные концепции JFrame и JPanel. На самом деле, я подумал, что мне нужно добавить JPanel к JFrame, чтобы добавить другие компоненты, такие как JLabel, JButton, ... et c. Но я понял, что на самом деле JPanel мне не нужен. Я могу просто добавить компоненты, просто используя add(button), add(label) до JFrame. Так зачем мне JPanel. И я думаю, что JFrame не нужен JPanel, а JPanel нужен JFrame. Правильно ли я понял?

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Всегда ли мне JPanel нужен?

Нет. Ну, если только вам не нужен Swing GUI. Тогда да.

Другой ответ ответил словами на эффект. «Нет, вы можете добавлять компоненты прямо во фрейм» Что они пропустили , так это то, что компоненты, добавленные в JFrame, добавляются в панель содержимого (автоматически). Панель содержимого - это JPanel.

Сказав, что:

  1. Я (и многие другие) рекомендую разработать приложение на основе основного содержимого. панель, а затем добавив эту панель в контейнер верхнего уровня по мере необходимости. Контейнер верхнего уровня может быть JFrame, JWindow, JDialog, JOptionPane ..
  2. Что вызвало вопрос? A JPanel - очень «легкий» контейнер (во многих отношениях). A GUI может содержать 1000 и не обременяться этим. Конечно, это редкое требование, но просто говорю ... используйте панели по мере необходимости и не беспокойтесь об этом.
1 голос
/ 05 августа 2020

Нет, не всегда. Простой графический пользовательский интерфейс может быть реализован путем простого добавления компонентов «непосредственно» в JFrame. Но для большей гибкости вы всегда будете использовать JPanels. Например, чтобы использовать разные макеты в разных частях GUI, чтобы сгруппировать определенные компоненты вместе, и т. Д. c.

JFrame поддерживается JRootPane, часть которого является contentPane.

enter image description here

(image from Oracle Javado c)

Когда вы добавляете компоненты в JFrame, вы действительно добавляете их на панель содержимого, например: frame.getContentPane().add(Component).

JFrame - это обычная начальная сцена приложения Swing GUI, тогда как JPanel предназначена для размещения в другой сцене (контейнере). Поскольку и панель содержимого, и JPanel наследуются от одного и того же класса ( Контейнер ), вы можете использовать их аналогичным образом, что касается добавления к ним компонентов.

...