复杂组件

9.1 网格组布局
    行和列的尺寸可以改变。可以将相邻的单元格合并以适应较大的组件。组件不需填充整个单元格区域,并可以指定其在单元格内的对齐方式。
    使用网格组管理器布局,需经过下列过程:
    1. 建立一个GridBagLayout对象,不需指定行和列。
    2. 将GridBagLayout对象设置成组件的布局管理器。
    3.
    为每个组件建立一个GridBagConstraints对象,设置GridBagConstraints对象的域以便指出组件在网格中的布局方案。
    4. 最后通过add(component,constraints);添加组件的约束。

    例如:
    GridBagLayout layout = new GridBagLayout();
    panel.setLayout(layout);
    GridBagConstraints constraints = new GridBagConstraints();
    constraints.weightx = 100;
    constraints.weighty = 100;
    constraints.gridx = 0;
    constraints.gridy = 2;
    constraints.gridwidth = 2;
    constraints.gridheight = 1;
    panel.add(component,constraints);

    设置GridBagConstraints对象的状态:
    1.gridx,gridy,gridwidth,gridheight参数
        gridx和gridy指定被添加组件左上角的行、列位置
        gridwidth和gridheight指定类组件占据的行数和列数。
        网格的坐标从0开始。左上角为(0,0)。
    2. 增量域
        网格布局中,要为每个区域设置增量域(weightx和weightx).如果增量设置为0,则这个区域永远为初始尺寸。
        概念上说,增量参数属于行和列属性,而不属于某个单元格。却需要在单元格上指定它们,这是因为网格组布局不暴露行和列。行和列等于每行或每列单元格增量的最大值。
    3. fill和anchor参数
        不希望组件拉伸至整个区域,设置fill约束。四个有效值:GridBagConstraints.NONE,GridBagConstraints.VERTICAL,GridBagConstraints.HORIZONTAL,GridBagConstraints.BOTH.
        如果组件没有填充整个区域,可以通过anchor域指定其位置。有效值::GridBagConstraints.CENTER,GridBagConstraints.NORTH,GridBagConstraints.NORTHEAST,GridBagConstraints.EAST.
    4. 填塞
        通过GridBagLayout的insets域在组件周围增加傅涓的空白区域。通过设置Insets对象的left,top,right,bottom指定周围的空间量。这叫外部填塞。
        通过ipadx和ipady指定内部填塞。
    5. 指定gridx,gridy,gridwidth,gridheight参数的另一种方法。
        AWT建议不将gridx,gridy设置为绝对位置,应该设置为常量GridBagConstraints.RELATIVE.然后按标准顺序,将组件添加到网格组布局中。即第一行从左至右,然后下一行。
        还要通过gridheight,gridwidth域指定一个适当的值设置组件的横跨的行和列。如果在最后一行或最后一列,不要给出实际值,用常量GridBagConstraints.REMAINDER替代。
        下面策略可以让网格组布局使用相对简单一些:
            1. 在纸上画出组件布局草图。
            2.
            找出一种网格,小组件被放置在一个单元格内,大组件将横跨多个单元格。
            3.
            用0,1,2...标识网格的行和列。现在可以读取gridx,gridy,gridwidth,gridheight的值。
            4.
            对每个组件考虑下列问题:是否需要水平或垂直填充他所在的单元格?如果不需要,希望如何排列?就是fill和anchor。
            5.
            将所有增量设置为100.如果需要某行或某列始终保持默认大小,将这行或列的所有组件的weightx和weighty设为0.
            6. 编写代码。仔细检查GridBagConstraints的设置。
            7. 编译、运行。
        也可使用工具可视化的指定约束。如NetBeans。
    6. 使用帮助类来管理网格组约束。
        很多程序员编写帮助函数或者帮助类来设置约束代码的编写。
        如例子中的GBC代替GridBagConstraints

你可能感兴趣的:(复杂组件)