顶层容器值得是容纳其他容器的容器组件,包括JFrame类,JWindows类,JDialog类,JApplet等。
Swing中的顶层容器类
Swing提供三个顶层容器类:JFrame,JDialog和JApplet。当使用这些容器类时,请谨记以下原则。
要在屏幕上显示,每个GUI组件必须是一个“容器层级”的一部分。
每个GUI组件只能属于一个容器,如果组件已经在一个容器当中,而又试图将它添加到另一个容器当中去,那么应该从第一个容器中移除该组件,然后添加到两一个容器去。
各种可视化组件不直接放到顶层容器中去,而是放在容器的内容面板中。
可以选择添加一个菜单栏到顶层容器中,菜单栏应该按惯例位于顶层容器中,但必须位于内容面板之外。
Swing中还有一个命名为JInternalFrame的内部窗体,它模仿JFrame,但实际上内部窗体并不是真正的顶层容器。
下面我们创建一个带有菜单栏和内容模板的窗体:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//TopLevelDemo.java不需要其他文件public class TopLevelDemo { 
 //创建一个GUI界面并显示。处于线程安全的考虑,应该从事件分发线程调用此方法
 private static void createAndShowGUI(){
 //创建并设置窗体
 JFrame frame=new JFrame("TopLevelDemo");
 //创建带有标题的窗体对象
 //设置当关闭窗体时自动退出程序
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 //创建一个菜单栏,将其背景设为绿色。
 JMenuBar greenMenuBar =new JMenuBar();
 greenMenuBar.setOpaque(true);//将菜单背景设置为不透明
 //设置菜单栏背景色
 greenMenuBar.setBackground(new Color(154,165,107));
 //设置菜单栏首选大小
 greenMenuBar.setPreferredSize(new Dimension(200,20));
 //创建一个黄色的标签并将其放入内容模板中
 JLabel yellowLabel=new JLabel();//创建一个标签对象
 yellowLabel.setOpaque(true);//将标签背景设为不透明
 //设置标签背景颜色
 yellowLabel.setBackground(new Color(248,210,101));
 //设置标签首选大小
 yellowLabel.setPreferredSize(new Dimension(200,180));
 //设置菜单栏并将标签添加到内容模板上
 frame.setJMenuBar(greenMenuBar);//将菜单栏添加到窗体上
 //向窗体的内容模板添加标签
 frame.getContentPane().add(yellowLabel,BorderLayout.CENTER);
 //显示窗体
 frame.pack();
 frame.setVisible(true);
 }
 public static void main(String []args){
 //为事件分发线程预定一个工作,创建显示本程序的GUI
 javax.swing.SwingUtilities.invokeLater(new Runnable(){
 public void run(){
 createAndShowGUI();
 }
 });
 }

 }


虽然该示例程序在一个独立的应用程序中使用JFrame,但是同样的原理也适用于Applet和JDialog