В чем разница между корневой панелью и контейнером верхнего уровня в 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.

Другие вопросы по тегам