文档详情

布局管理器概览.ppt

发布:2016-10-24约8.93千字共39页下载文档
文本预览下载声明
Swing 用户界面组件 ——布局管理器 如何使用网格组管理器进行布局? 1)建立一个GridBagLayout的对象。不需要指定网格的行数和列数。布局管理器会根据后面所给的信息猜测出来。 GridBagLayout gb=new GridBagLayout(); ContainerName.setLayout(gb); 2)将GridBagLayout对象设置成组件的布局管理器。 3)为每个组件建立一个GridBagLayout对象。设置GridBagLayout对象的域以便指出组件在网格组中的布局方案。 4)最后,通过下面的调用添加组件的约束: add(component ,constraints); 有时候用户可能不想使用任何布局管理器,而只是想把组件放在一个固定的位置上(通常称为绝对定位)。这对于与平台无关的应用程序来说并不是一个好主意,但可用来快速地构造原型。 步骤: 1)将布局管理器设置为null。 2)将组件添加到容器中。 3)指定想要放置的位置和大小。 原则上,可以通过自己设计LayoutManager类来实现特殊的布局方式。 当把很多组件添加到窗口中时,需要考虑遍历顺序的问题。窗口被初次显示时,遍历顺序的第一个组件会有键盘焦点。每次用户按下TAB键,下一个组件就会获得焦点。 遍历顺序很直观,他的顺序是从左至右,从上至下。 如果容器还包含其他的容器,情况就更加复杂了。当焦点给予另外一个容器时,那个容器左上角的组件就会自动地获得焦点,然后再遍历那个容器中的所有组件。;最后,将焦点移交给紧跟着那个容器的组件。 利用这一点,可以将相关元素组织在一起并放置在一个容器中。例如,放置在一个面板中。 下面的策略可以让网格组布局的使用相对简单一些: 1)在纸上画出组件布局草图。 2)找出一种网格,小组件被放置在一个单元格内,大组件将横跨多个单元格。 3)用0,1,2.......标识网格的行和列。现在可以读取gridx,gridy,gridwidth和gridheight的值。 4) 对于每个组件,需要考虑下列问题:是否需要水平或者垂直填充它所在的单元格?如果不需要,希望如何排列?这些就是fill和anchor参数的设置。 5)将所有的增量设置为100.如果需要某行或某列始终保持默认的大小,就将这行或这列中所有组件的weightx和weighty设置为0. 6)编写代码。仔细地检查GridBagConstraints的设置。错误的约束可能会破坏整个布局。 7)编译,运行。 9.6.2 组布局 GroupLayout 是一个 LayoutManager,它将组件按层次分组,以决定它们在 Container 中的位置。GroupLayout 主要供生成器使用,但也可以手工编码。分组由 Group 类的实例来完成。GroupLayout 支持两种组。串行组 (sequential group) 按顺序一个接一个地放置其子元素。并行组 (parallel group) 能够以四种方式对齐其子元素。 每个组可以包含任意数量的元素,其中元素有 Group、component 或间隙 (gap)。间隙可被视为一个具有最小大小、首选大小和最大大小的不可见组件。此外,GroupLayout 还支持其值取自 LayoutStyle 的首选间隙。 GroupLayout是一个很重要的是额布局管理器,在jdk 1.6才加入,配合其它的管理器可以实现很好的界面。 GroupLayout必须要设置它的GroupLayout.setHorizontalGroup和GroupLayout.setVerticalGroup。 9.6.3 不使用布局管理器 示例代码: frame.setLayout(null); JButton ok = new JButton(ok); frame.add(ok); ok.setBounds(10,10,30,15); 9.6.4 定制布局管理器器 定制布局管理器必须实现LayoutManager接口,并且需要覆盖下面5个方法: void addLayoutComponent(String s,Component c);
显示全部
相似文档