В чем разница между корневой панелью и контейнером верхнего уровня в Swing?
Я понимаю, что каждый контейнер верхнего уровня имеет несколько слоев:
корневая панель
панель слоев
панель содержимого
стеклянная панель
но я не понимаю, является ли корневая панель самим контейнером верхнего уровня.
Какая связь между панелью и контейнером? На самом деле, когда я возвращаю панель сgetContentPane()
объект имеет тип Container
!
2 ответа
Если вы посмотрите на предыдущие ответы или ссылки, между строк вы обнаружите, что фактический ответ на вопрос:
Корневая панель НЕ является самим контейнером верхнего уровня, но контейнер верхнего уровня имеет корневую панель.
Поскольку все контейнеры верхнего уровня Swing (а именно, JFrame
, JDialog
а также JApplet
) реализовать RootPaneContainer
интерфейс, это означает, что вы можете получить доступ к их корневой панели в общем виде (нет необходимости проверять, является ли это JFrame
или же JDialog
....)
Что касается второй части вопроса, разница между панелью и контейнером, на самом деле нет никакой разницы, панель является java.awt.Container
(или любой подкласс, в частности javax.swing.JPanel
).
Что важно знать, так это различные панели, существующие в контейнере верхнего уровня Swing (root, content, glass, layer), для этого вам нужно взглянуть на ссылки, размещенные в предыдущих ответах.
У вас также есть JFrame
, Узнайте больше о том, как использовать корневые панели.
http://java.sun.com/javase/7/docs/api/javax/swing/doc-files/JRootPane-1.gif От JRootPane:
"Тяжелые" компоненты (те, которые делегируют одноранговому узлу или нативному компоненту в хост-системе) показаны с более темным, более тяжелым прямоугольником. Четыре тяжеловесных контейнера JFC/Swing (JFrame, JDialog, JWindow и JApplet) показаны относительно классов AWT, которые они расширяют. Эти четыре компонента являются единственными тяжелыми контейнерами в библиотеке Swing.