容器是用来存放盒组织组件的对象。布局管理器是用来在容器中摆放组件的特殊对象。容器和布局管理器在创建用户界面中起着至关重要的作用。
像JButton之类的用户界面组件如果不放到容器中是不能显示的。容器是具有存放其他组件能力的组件。
所有容器的基类都是Java.awt.Container,它是Java.awt.Component的子类。Container类具有以下基本功能:
① 可以使用各种add或remove方法添加或删除组件。
② 拥有layout属性,用于指定在容器中放置组件的布局管理器。每个容器都有一个默认的布局管理器。
③ 提供java.awt.event.ContainerEvent事件的注册方法。
下面回顾三个最常用的Swing容器:JFrame、JApplet和JPanel。
1)JFrame
框架JFrame是Frame的Swing版本,是Java图形应用程序的顶层容器。与Frame相同,它是以具有标题栏和边框的独立窗口显示的。下面是JFrame中经常用到的属性:
① contentPane是框架的内容窗格。
② iconImage是表示框架的图像。
③ jMenuBar是框架的可选菜单栏。
④ resizable是一个布尔型值,指明框架是否是可变大小的。默认值为true。
⑤ title指明框架的标题。
2)JApplet
JApplet是Applet的Swing版本。因为它是Applet的子类,因此,它具有Web浏览器所要求的所有功能。下面是在Applet中定义的四个基本方法:
// Called by the browser when the Web page containing // this applet is initially loaded public void init() // Called by the browser after the init() method and // every time the Web page is visited public void start() // Called by the browser when the page containing this // applet becomes inactive public void stop() // Called by the browser when the Web browser exits public void destroy()
3)JPanel
面板起着子容器的作用,用于组织用户界面组件。
每个容器都有一个布局管理器来负责放置它的组件。特定类型的容器具有相应的默认布局管理器。
布局管理器根据自己的规则和属性设置来放置组件,组件的放置还受到组件自身性质的影响。每个布局管理器都有它自己特定的放置规则。
一些布局管理器具有影响容器中组件大小和位置的属性。
容器中组件的大小是由许多因素决定的,比如:
① 容器中使用的布局管理器的类型。
② 与每个组价相关的布局限制。
③ 容器的大小。
④ 所有组件共有的某些属性。
preferredSize属性指定组件看上去最合适的理想大小。
1)CardLayout
CardLayout布局管理器将组件像卡片一样放置在容器中。在CardLayout管理器中,可以指定一叠组件周围的水平间隔和垂直间隔的大小。
2)BoxLayout
javax.swing.BoxLayout是一个Swing布局管理器,它在一行或一列中放置组件。要创建BoxLayout对象,须使用下面的构造方法:
public BoxLayout(Container target, int axis)
该构造方法不同于其他布局管理器的构造方法。它是为指定的目标容器创建布局管理器。
3)使用null布局管理器
为了方便起见,Java也支持称为空布局的绝对布局,可以在固定位置上放置组件。在这种情况下,组件必须通过它的实例方法setBounds()来放置,如下所示:
public void setBounds(int x, int y, int width, int height);
除了Java提供的布局管理器之外,还可以创建自己的布局管理器。LayoutManager接口提供下面几种在容器中放置组件的方法:
public void addLayoutComponent(String name,Component comp)
将给定名称的指定组件添加到容器中。
public void layoutContainer(Container parent)
把组件放置到指定的容器中。
public void removeLayoutComponent(Component comp)
从布局中删除指定的组件。
JScrollPane
对象的内容不能在视图区域中完全显示时,经常需要滚动它。可以使用JScrollBar和JSlider来达到这一目的,但是必须手工编写代码以实现滚动功能。JScrollPane是一个不用编码自动支持滚动的组件。
JTabbedPane
JTabbedPane是一个有用的Swing容器,它提供了一组相互排斥的选项卡来访问多个组件。
JSplitPane
JSplitPane是一个便利的Swing容器,它包含两个用称为分隔器的分隔栏分开的组件。
Swing提供了多种可以装饰组件的边框。
Swing边框定义在Border接口中。一共有八个具体的边框类:
1)BevelBorder是一个可凸、可凹的三维边框。
2)SoftBevelBorder用光滑的角提高或降低倾斜度。
3)EmptyBorder是一个有边框空间但没有边框线的边框。
4)EtchedBorder是一个蚀刻边框,此边框可以是槽也可以是棱。
5)LineBorder在边框周围绘制一条任意宽度的单色边框线。
6)MetteBorder是一个虚线边框,边框线的虚线是由图标够成的。
7)CompoundBorder用于把两个Border对象组合为一个边框。
8)TitleBorder是一个在指定位置显示字符串标题的边框。