Swing三大頂層容器JFrame、JDialog、JApplet是包含層次樹的根節點。本文詳細說明內容面板、菜單欄、根面板架構及常見陷阱。
ContentPane),實際可視組件均直接或間接添加於此。JMenuBar)置於內容面板之外。TopLevelDemo創建一個JFrame,綠色菜單欄、黃色標籤居中(圖1)。其包含層次樹(圖2)展示:JFrame→RootPane→LayeredPane→ContentPane+MenuBar+GlassPane。

圖 1. 應用程序創建的 frame

圖 2. GUI 的包含層次
getContentPane()返回Container(非JComponent),默認BorderLayout。兩種定制方式:
Container API)。JPanel(設置setOpaque(true)、佈局、邊框),再setContentPane()替換(推薦,更清晰)。注意:不可用透明容器(JScrollPane、JSplitPane、JTabbedPane)作內容面板,會導致繪製混亂。
創建JMenuBar組裝菜單後,frame.setJMenuBar(menuBar)。理論上所有頂層容器支持,實際僅JFrame/JApplet顯示。
每個頂層容器隱式擁有JRootPane,管理四大組件(圖3):
ContentPane與MenuBar,支持Z序管理。通常無需直接操作根面板,除非需全局事件攔截或特殊繪製。

圖 3. 根面板包含的中間容器