Swing提供3种顶层容器类:JFrame,JDialog,JApplet。当使用这三个类时,你必须注意以下几点:
1.为了显示在屏幕上,每个GUI组件必须是包含层次(containment hierarchy)的一部分。包含层次是组件的一个树型结构,最顶层的容器是它的根。
2.每个GUI组件只能被包含一次。如果一个组件已经在一个容器中,这时试图将它加入到一个新的容器,则这个组件会从第一个容器移除,并加入到第二个容器中。
3.每个顶层容器都有一个内容面板(content pane),一般情况下,这个内容面板会包含(直接或间接地)所有顶层容器GUI的可视组件。
4.可以在顶层容器中加入一个菜单条(menu bar)。通常这个菜单条被放置在顶层容器中,但在内容面板外。
下面这张图片是通过应用程序创建的一个frame。这个frame包含一个绿色的菜单(空菜单),在这个frame的内容面板上有一个巨大的黄色空标签。
这个例子的源代码见TopLevelDemo.java。下图是这个例子GUI的包含层次。
1.顶层容器与包含层次
每个使用Swing组件的程序都至少有一个顶层容器。这个顶层容器是包含层次的根节点—这个层次会包含所有将在这个顶层容器中出现的Swing组件。
通常情况下,一个单独的基于Swing GUI的应用程序至少有一个包含层次,且它的根节点是JFrame。举例来说,如果一个应用程序拥有一个窗口和两个对话框,那么这个应用程序将会有三个包含层次,也即会有三个顶层容器。一个包含层次将JFrame作为它的根节点,两外两个包含层次各有一个JDialog作为它的根节点。
一个基于Swing组件的小程序(applet)至少含有一个包含层次,并且可以确定其中必有一个是以JApplet作为其根节点的。例如,一个小程序带有一个对话框,则它会有两个包含层次。在浏览器窗口中的组件将会置于一个包含层次,它的根节点是一个JApplet对象。对话框会有一个包含层次,它的根节点是一个JDialog对象。