首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Swing頂層容器詳解:JFrame、JDialog、JApplet與根面板架構

     編輯:Java 相關知識

Swing三大頂層容器JFrame、JDialog、JApplet是包含層次樹的根節點。本文詳細說明內容面板、菜單欄、根面板架構及常見陷阱。

核心規則

  1. 每個可視組件必須屬於某個包含層次,頂層容器為根。
  2. 組件同一時刻只能屬於一個容器,重複添加會自動從原容器移除。
  3. 頂層容器擁有內容面板(ContentPane),實際可視組件均直接或間接添加於此。
  4. 可選菜單欄(JMenuBar)置於內容面板之外。

包含層次示例

TopLevelDemo創建一個JFrame,綠色菜單欄、黃色標籤居中(圖1)。其包含層次樹(圖2)展示:JFrame→RootPane→LayeredPane→ContentPane+MenuBar+GlassPane。

TopLevelDemo 運行效果

圖 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):

  • GlassPane:透明,攔截輸入事件、跨組件繪製。
  • LayeredPane:容納ContentPane與MenuBar,支持Z序管理。
  • ContentPane:實際業務組件容器。
  • MenuBar:菜單欄(可選)。

通常無需直接操作根面板,除非需全局事件攔截或特殊繪製。

根面板內部結構

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

完整示例下載

TopLevelDemo.java

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved