Существуют контейнеры верхнего уровня, такие как JFrame. Они могут служить основным окном, в котором построен графический интерфейс.
Тогда есть контейнеры промежуточного уровня. Они должны быть помещены в другие контейнеры, они не могут существовать сами по себе. Они либо помогают вам организовать компоненты, либо добавляют функциональность. JPanel - это очень простой контейнер, который помогает вам организовать другие компоненты. В то время как JSplitPane добавляет функциональность, имея две панели переменного размера.
Если у вас сложный графический интерфейс, вы можете использовать JPanels для организации различных областей вашего графического интерфейса, а затем добавить каждую панель в свой JFrame.
В Java Swing API использует Composite Design Pattern . Это означает, что вы можете составлять очень сложные объекты из других объектов и при этом обрабатывать составные объекты так же, как и простые объекты. Таким образом, вы можете поместить JPanel в JPanel, и он по-прежнему будет вести себя как JPanel.
Думайте об этом, как орудие для снастей (или набор для шитья). Он сделан из большого контейнера. Но вместо того, чтобы помещать много маленьких предметов в этот большой контейнер и затруднять управление им позже, вы можете поместить несколько небольших отделений в большую коробку. Затем крючки и грузила уходят в отсеки. Это проще в управлении. Большая коробка - это JFrame, а отсеки - JPanels.