会计考友 发表于 2012-8-4 12:44:44

JAVA认证考试专业语言基础知识23

c.show(p1,"3");
   
    }
   
    });
   
    p2.add(previous);
   
    p2.add(next);
   
    p2.add(first);
   
    p2.add(last);
   
    p2.add(third);
   
    f.add(p1);//默认添加到中间
   
    f.add(p2,BorderLayout.SOUTH);
   
    f.pack();
   
    f.setVisible(true);
   
    }
   
    public static void main(String[] args)
   
    {
   
    new calculator()。init();
   
    }
   
    }
   
    GridBagLayout是功能最强大也是最复杂的布局管理器,添加到其中的组件可以横跨一个或多个网格,并可以设置各网格的大小各不相同,当窗口大小发生变化时,其也可以准确的控制窗口各部分的反应。为了处理GridBagLayout中组件的大小和跨越性,我们还需要一个GridBagConstraints对象,用这个对象与特定的组件相关联,来控制组件的大小和跨越性。在使用GridBagLayout时一般需要4步:
   
    1. 创建GridBagLayout,并指定容器使用该布局管理器
   
    GridBagLayout gb = new GridBagLayout();
   
    container.setLayout(gb);

会计考友 发表于 2012-8-4 12:44:45

JAVA认证考试专业语言基础知识23

2. 创建GridBagConstraints的对象,并设置该对象的相关属性
   
    GridBagConstraints gbc = new GridBagConstraints();
   
    gbc.gridx=2;
   
    gbc.gridy=1;
   
    gbc.gridwidth=2;
   
    gbc.gridheight=1;
   
    3. 调用GridBagLayout对象的方法来建立GridBagConstraints对象与受控制组件之间的联系。
   
    gb.setConstraints(c,gbc);//设置c组件受gbc控制
   
    4. 添加组件
   
    container.add(c);
   
    通常我们可以将2,3,4步写成一个addComponent方法,为这个方法传递所需要的参数,来进行添加组件的化简。例如:
   
    public void addComponent(Component c, int gx, int gy, int gw,int gh)
   
    {
   
    this.gridx=gx;
   
    this.gridy=gy;
   
    this.gridwidth=gw;
   
    this.gridheight=gh;
   
    gb.setConstraints(c,gbc);
   
    container.add(c);
   
    }
   
    使用GridBagLayout关键在于GridBagConstraints,该类具有如下几个方法:
   
    fill:设置组件如何占领空白区域,它可取如下几个值:GridBagConstraints.NONE, GridBagConstraints.HORIZONTAL, GridBagConstraints.VERTICAL, GridBagConstraints.BOTH.
   
    gridx,gridy:设置组件的左上角所在网格的索引(网格的索引从0 开始),此外这两个值还可以设为GridBagConstraints.RELATIVE,这个值也是默认值,它表明当前组件紧跟在上一个组件之后。
   
    gridwidht和gridheight:设置组件横向纵向跨越多少个网格,他们的默认值都是1,如果该组件是横向或纵向的最后一个还可以将此值设为GridBagConstraints.REMAINDER,若为倒数第二个组件则可以设值为GridBagConstraints.RELATIVE.
   
    ipadx和ipady:设置组件横向纵向的内部填充大小,即在组件的最小尺寸上还需要增大多少,若设置了这个值则组件在最小尺寸的基础上增大ipadx*2或 ipady*2像素。
   
    weightx和weighty(double类型):就是权重,也就是组件组件占领多余空间的水平或垂直增加比例,默认值为0也就是不占领多余空间。例如有三个组件,我们将他们的水平增加比例分别设为1.0,2.0,3.0,当容器宽度增加60像素时,他们分别增加10,20和30像素。如果我们希望某个组件的大小会随着容器的变化而变化,我们需要同时设置fill和weightx,weighty属性。
   
    Swing中的BoxLayout布局管理器提供了一个构造器:BoxLayout(Container targer,int axis),它制定创建基于targer容器的BoxLayout布局管理器,它里面的组件按axis方向排列,axis有BoxLayout.X_AXIS和BoxLayout.Y_AXIS两个方向。BoxLayout通常和Box容器结合使用,Box容器有点像Panel,它默认使用BoxLayout布局管理器。Box有两个静态方法来创建Box对象:createHorizontalBox()和createVerticalBox(),一旦获得了Box容器之后,就可以使用Box来承装普通GUI组件,然后再将这些Box组件添加到其他容器中,从而形成整体的窗口布局。

会计考友 发表于 2012-8-4 12:44:46

JAVA认证考试专业语言基础知识23

例如:
   
    public class Test
   
    {
   
    private Frame f = new Frame("cs");
   
    private Box horizontal = Box.createHorizontalBox();
   
    private Box vertical = Box.createVerticalBox();
   
    public void init()
   
    {
   
    horizontal.add(new Button("shuiping1"));
   
    horizontal.add(new Button("shuiping2"));
   
    vertical.add(new Button("chuizhi1"));
   
    vertical.add(new Button("chuizhi2"));
   
    f.add(horizontal, BorderLayout.NORTH);
   
    f.add(vertical);
   
    f.pack();
   
    f.setVisible(true);
   
    }
   
    public static void main(String[] args)
   
    {
   
    new Test()。init();
   
    }
   
    }
   
    最后我们还可以使用绝对定位:只需要将Container的布局管理器设为null即可,也就是setLayout(null),往容器中加组件的时候指定组件的位置和大小。一般调用setBounds(int x,int y,int width,int height)。
页: [1]
查看完整版本: JAVA认证考试专业语言基础知识23