Java中GridBagLayout的用法.doc_第1页
Java中GridBagLayout的用法.doc_第2页
Java中GridBagLayout的用法.doc_第3页
Java中GridBagLayout的用法.doc_第4页
Java中GridBagLayout的用法.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

布局管理器 GridBagLayout 的使用由TMDC搜集整理,欢迎访问我的小博客!Java布局管理器有FlowLayout, BorderLayout, GridLayout, CardLayout, GridBagLayout等,相比较而言,GridBagLayout的使用方式要复杂一些。但它的表现力也最丰富。之前我对GridBagLayout的使用也是一知半解,具体的用法不是十分的明了。这两天认真的看了这一块,就写了下来。使用 GridBagLayout的主要工作就是设置组件的约束,通过GridBagConstraints的实例设置。GridBagConstraints 主要有11个参数:gridx, gridy, gridwidth ,gridheight ,anchor ,fill ,weightx ,weighty ,insets ,ipadx ,ipady;每个参数的意义可以参考java api上的说明。本文的最后附有anchor属性和fill属性的示例。实际使用中根据自己的需要设置特定的属性。在Java api中给出了一个GridBagLayout的例子和实现,下面的是自己的实现方式。CODEimport java.awt.*;import java.awt.event.*;import java.applet.*;public class GridBagLayoutDemo extends Applet GridBagLayout gbaglayout;GridBagConstraints constraints;public void init() gbaglayout = new GridBagLayout(); constraints = new GridBagConstraints(); setLayout(gbaglayout); /Button 1 Button btn1 = new Button(Button01); constraints.gridx = 0; constraints.gridy = 0; constraints.gridwidth = 1; constraints.gridheight = 1; constraints.anchor = GridBagConstraints.CENTER; constraints.fill = GridBagConstraints.NONE; constraints.weightx = 0.0; constraints.weighty = 0.0; constraints.insets = new Insets(0, 0, 0, 0); constraints.ipadx = 0; constraints.ipady = 0; makeButton(gbaglayout, constraints, btn1); /Button 2 Button btn2 = new Button(Button02); constraints.gridx = 1; makeButton(gbaglayout, constraints, btn2); /Button 3 Button btn3 = new Button(Button03); constraints.gridx = 2; makeButton(gbaglayout, constraints, btn3); /Button 4 Button btn4 = new Button(Button04); constraints.gridx = 3; makeButton(gbaglayout, constraints, btn4);/Button 5 Button btn5 = new Button(Button05); constraints.gridx = 0; constraints.gridy = 1; constraints.gridwidth = 4; makeButton(gbaglayout, constraints, btn5); /Button 6 Button btn6 = new Button(Button06); constraints.gridx = 0; constraints.gridy = 2; constraints.gridwidth = 3; makeButton(gbaglayout, constraints, btn6); /Button 7 Button btn7 = new Button(Button07); constraints.gridx = 3; constraints.gridy = 2; constraints.gridwidth = 1; makeButton(gbaglayout, constraints, btn7); /Button 8 Button btn8 = new Button(Button08); constraints.gridx = 0; constraints.gridy = 3; constraints.gridwidth = 1; constraints.gridheight = 2; makeButton(gbaglayout, constraints, btn8); /Button 9 Button btn9 = new Button(Button09); constraints.gridx = 1; constraints.gridy = 3; constraints.gridwidth = 3; constraints.gridheight = 1; makeButton(gbaglayout, constraints, btn9); /Button 10 Button btn10 = new Button(Button10); constraints.gridx = 1; constraints.gridy = 4; constraints.gridwidth = 3; constraints.gridheight = 1; makeButton(gbaglayout, constraints, btn10);private void makeButton(GridBagLayout gbaglayout, GridBagConstraints constraints, Component component) gbaglayout.setConstraints(component, constraints); add(component);public static void main(String args) Frame frame = new Frame(GridBagLayoutDemo); frame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); GridBagLayoutDemo demo = new GridBagLayoutDemo(); demo.init(); frame.add(BorderLayout.CENTER, demo); frame.setSize(270, 150); /frame.setSize(361, 254); frame.setVisible(true);CODE显示窗口可以如图所示划分为 5 行和 4 列,每个按钮所在的单元可以很容易的确定,所以 gridx 和 gridy 的值都很容易确定,组件放置在的位置也就确定了。然而,组件都有一个默认的大小,它和它所在的单元格大小一般情况下都是不同的,并且如果窗口发生变化时,组件做出什么样的改变就要用到fill ,weightx 和 weighty了。结合具体的例子来看:设置 Button 1/Button 1Button btn1 = new Button(Button01);/所在单元格为(0, 0)constraints.gridx = 0;constraints.gridy = 0;/占用一个长度长和一个长度宽constraints.gridwidth = 1;constraints.gridheight = 1;/这里使用默认的 anchorconstraints.anchor = GridBagConstraints.CENTER;/设置NONE填充constraints.fill = GridBagConstraints.NONE;/设置填充权重constraints.weightx = 0.0;constraints.weighty = 0.0;/Insets, ipadx, ipady使用默认值constraints.insets = new Insets(0, 0, 0, 0);constraints.ipadx = 0;constraints.ipady = 0;/添加 Button01 按钮makeButton(gbaglayout, constraints, btn1);设置 Button02, Button03, Button04/Button 2Button btn2 = new Button(Button02);constraints.gridx = 1;makeButton(gbaglayout, constraints, btn2);/Button 3Button btn3 = new Button(Button03);constraints.gridx = 2;makeButton(gbaglayout, constraints, btn3);/Button 4Button btn4 = new Button(Button04);constraints.gridx = 3;makeButton(gbaglayout, constraints, btn4);Button02, Button03, Button04和Button01的区别是,只需要设置他们的gridx值;其他的不变。设置 Button05/Button 5Button btn5 = new Button(Button05);/所在单元格为(0, 1)constraints.gridx = 0;constraints.gridy = 1;/占用了所有的4个单元格宽度 ,一个单元格高,省略没写constraints.gridwidth = 4;makeButton(gbaglayout, constraints, btn5);设置 Button06/Button 6Button btn6 = new Button(Button06);/所在单元格为(0, 2)constraints.gridx = 0;constraints.gridy = 2;/占用了所有的3个单元格宽度 ,一个单元格高,省略没写constraints.gridwidth = 3;makeButton(gbaglayout, constraints, btn6);设置 Button07/Button 7Button btn7 = new Button(Button07);/所在单元格为(3, 2)constraints.gridx = 3;constraints.gridy = 2;/占用了所有的1个单元格宽度 ,一个单元格高,省略没写constraints.gridwidth = 1;makeButton(gbaglayout, constraints, btn7);设置 Button08/Button 8Button btn8 = new Button(Button08);/所在单元格为(0, 3)constraints.gridx = 0;constraints.gridy = 3;/占用了所有的1个单元格宽度 ,2个单元格高constraints.gridwidth = 1;constraints.gridheight = 2;makeButton(gbaglayout, constraints, btn8);设置 Button09/Button 9Button btn9 = new Button(Button09);/所在单元格为(1, 3)constraints.gridx = 1;constraints.gridy = 3;/占用了所有的3个单元格宽度 ,1个单元格高constraints.gridwidth = 3;constraints.gridheight = 1;makeButton(gbaglayout, constraints, btn9);设置 Button10/Button 10Button btn10 = new Button(Button10);/所在单元格为(1, 4)constraints.gridx = 1;constraints.gridy = 4;/占用了所有的3个单元格宽度 ,1个单元格高,由于和Button09一样,也可以不写constraints.gridwidth = 3;constraints.gridheight = 1;makeButton(gbaglayout, constraints, btn10);设置好10个按钮之后,看看结果如何:和目标差别还很大,但它确实是按照期望的方式,在特定的单元格内显示了。为什么有差别呢?原因是单元格比按钮默认的大小要大,没有设置fill方式。由于需要Button01, Button02, Button03 和 Button04的长度充满单元格,可修改 fill 属性为:constraints.fill = GridBagConstraints.HORIZONTAL;同时改变constraints.weightx = 1.0;使得窗口变化时按钮能随之伸长(如果不改变weightx值,改变窗口大小时,看看会有什么效果)。显示结果:可以看到 Button08有问题,更改相应部分:/Button 8Button btn8 = new Button(Button08);constraints.gridx = 0;constraints.gridy = 3;constraints.gridwidth = 1;constraints.gridheight = 2;/设置Button08的 fill 为 BOTHconstraints.fill = GridBagConstraints.BOTH;constraints.weightx = 1.0;constraints.weighty = 1.0;makeButton(gbaglayout, constraints, btn8);/Button09Button btn9 = new Button(Button09);constraints.gridx = 1;constraints.gridy = 3;constraints.gridwidth = 3;constraints.gridheight = 1;/不需要垂直变化constraints.fill = GridBagConstraints.HORIZONTAL;constraints.weightx = 1.0;constraints.weighty = 0.0;makeButton(gbaglayout, constraints, btn9);/Button 10Button btn10 = new Button(Button10);constraints.gridx = 1;constraints.gridy = 4;constraints.gridwidth = 3;constraints.gridheight = 1;/需要垂直变化constraints.fill = GridBagConstraints.BOTH;constraints.weightx = 1.0;constraints.weighty = 1.0;makeButton(gbaglayout, constraints, btn10);好了,所有的属性设置好了。完整代码:CODEimport java.awt.*;import java.awt.event.*;import java.applet.*;public class GridBagLayoutDemo extends Applet GridBagLayout gbaglayout;GridBagConstraints constraints;public void init() gbaglayout = new GridBagLayout(); constraints = new GridBagConstraints(); setLayout(gbaglayout); /Button 1 Button btn1 = new Button(Button01); constraints.gridx = 0; constraints.gridy = 0; constraints.gridwidth = 1; constraints.gridheight = 1; constraints.anchor = GridBagConstraints.CENTER; constraints.fill = GridBagConstraints.HORIZONTAL; constraints.weightx = 1.0; constraints.weighty = 0.0; constraints.insets = new Insets(0, 0, 0, 0); constraints.ipadx = 0; constraints.ipady = 0; makeButton(gbaglayout, constraints, btn1);/Button 2 Button btn2 = new Button(Button02); constraints.gridx = 1; makeButton(gbaglayout, constraints, btn2); /Button 3 Button btn3 = new Button(Button03); constraints.gridx = 2; makeButton(gbaglayout, constraints, btn3); /Button 4 Button btn4 = new Button(Button04); constraints.gridx = 3; makeButton(gbaglayout, constraints, btn4); /Button 5 Button btn5 = new Button(Button05); constraints.gridx = 0; constraints.gridy = 1; constraints.gridwidth = 4; makeButton(gbaglayout, constraints, btn5); /Button 6 Button btn6 = new Button(Button06); constraints.gridx = 0; constraints.gridy = 2; constraints.gridwidth = 3; makeButton(gbaglayout, constraints, btn6); /Button 7 Button btn7 = new Button(Button07); constraints.gridx = 3; constraints.gridy = 2; constraints.gridwidth = 1; makeButton(gbaglayout, constraints, btn7); /Button 8 Button btn8 = new Button(Button08); constraints.gridx = 0; constraints.gridy = 3; constraints.gridwidth = 1; constraints.gridheight = 2; constraints.fill = GridBagConstraints.BOTH; constraints.weightx = 1.0; constraints.weighty = 1.0; makeButton(gbaglayout, constraints, btn8);/Button 9 Button btn9 = new Button(Button09); constraints.gridx = 1; constraints.gridy = 3; constraints.gridwidth = 3; constraints.gridheight = 1; constraints.fill = GridBagConstrai

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论