getContentPane()
всегда возвращает Container
экземпляр. Однако вы должны заметить, что JPanel
объекты являются Container
экземплярами, а также другими классами в среде Swing. Фактический класс возвращаемого экземпляра не имеет значения, поскольку у вас нет контроля над тем, какая реализация Container
используется в качестве contentPane (если вы не принудительно указали конкретную contentPane), и в большинстве случаев это не должно быть проблемой.
В JFrame
можно добавить множество графических виджетов, например JButton
, JLabel
и т. Д. Однако они будут автоматически добавлены в связанную панель содержимого.
JPanel
не обрабатывает позиционирование объектов, LayoutManager
, связанный с вашей панелью; либо автоматически на основе собственного набора правил (например, FlowLayout
), либо с помощью ограничений, которые вы указали при добавлении объекта в контейнер (хороший пример - менеджер компоновки GridBagLayout
). JavaDoc на LayoutManager обычно содержит достаточно информации, чтобы вы могли начать их использовать.
Вы можете иметь вложенные панели, да. Container
может содержать другие Container
экземпляров. Хотя это кажется сложным решением, оно позволяет вам точно контролировать, как отображается ваш графический интерфейс. В зависимости от того, какую LayoutManager
вы используете, от потребностей, которые вы должны выполнить с помощью пользовательского интерфейса, и от ваших собственных предпочтений / привычек в качестве разработчика, вам может понадобиться меньше или больше вложенных панелей.