Я понимаю, что каждый высокоуровневый контейнер имеет некоторые слои:
корневая область
область слоя
довольный область
стеклянная область
но я не понимаю, является ли корневая область самим высокоуровневым контейнером.
Каковы отношения между областью и контейнером? На самом деле, когда я возвращаю область с getContentPane()
, объект имеет тип Container
!
Если вы посмотрите на предыдущие ответы или ссылки, то увидите между строк, что на самом деле ответ на вопрос таков:
Корневая панель НЕ контейнер верхнего уровня, но контейнер верхнего уровня ИМЕЕТ корневую панель.
Поскольку все контейнеры верхнего уровня Swing (а именно, JFrame
, JDialog
и JApplet
) реализуют интерфейс RootPaneContainer
, это означает, что вы можете получить доступ к их корневой панели в общем случае (нет необходимости проверять, является ли это JFrame
или JDialog
. ...)
По поводу второй части вопроса, разницы между панелью и контейнером, на самом деле никакой разницы нет, панель - это java.awt.Container
(или любой подкласс, в частности javax.swing.JPanel
).
Что важно понять, так это различные панели, которые существуют в контейнере верхнего уровня Swing (корневая, содержимое, стеклянная, многослойная), для этого вам нужно взглянуть на ссылки, размещенные в предыдущих ответах.
У вас также есть JFrame
. Подробнее см. Как использовать корневые панели .
Из JRootPane :
«Тяжелые» компоненты (те, которые делегируются одноранговому узлу или собственный компонент в хост-системе) показаны более темным и тяжелым прямоугольником. Четыре тяжелых контейнера JFC / Swing (JFrame, JDialog, JWindow и JApplet) показаны по отношению к классам AWT, которые они расширяют. Эти четыре компонента - единственные тяжелые контейнеры в библиотеке Swing.