Swing无序网格布局管理器(GridBagLayout)应用详解

转载 2010年04月07日 14:22:00

转自 http://www.boxcode.cn/html/JAVA/J2SE/2009/0812/616.html

无序网格布局管理器

无序网格布局(GridBagLayou)是最灵活,同时也是最复杂的布局管理器,其布局机制多少有些复杂并且令人感到棘手。无序网格布局可以使组件扩充到多行多列,而无须所有组件都具有同样的大小。这可以通过设置一个与容器关联的单元的矩形网格并把每个组件放在一个或多个单元内这个办法来实现。这些单元形成了组件的显示区域。

GridBagLayout构造函数

无序网格布局使用两个类来排列组件:java.awt.GridBagLayout和java.awt.GridBagConstraints。而构造函数:

public GridBagLayout()

创建一个新的无序网格布局管理器,再用setLayout(GridBagLayout gridbag)方法将其设置成一个容器。

无序网格约束

无序网格布局管理器放置组件的模式依赖于下面这个方法施加在组件上的约束条件:

public void GridBagConstraints(Component comp, GridBagConstraints constraint);

这里的约束条件由GridBagConstraints类中的一组公共字段表示。这些字段可以被赋以特定的值,或者被赋以该类中已有的一组值。下一节中将描述GridBagConstraints类中的这些公共字段。

gridx和gridy

放置一个组件时需要两个坐标(x, y),例如,确定位于网格单元中某个按钮B1的位置时就需要有坐标。然后,就可以把该按钮的某一角,最好是左上角,放在这个特定的坐标位置(x, y)了。


 

字段gridx和gridy分别表示x坐标和y坐标。gridx表示组件显示区域左侧单元的个数,其中,最左边单元的gridx=0。gridy表示组件显示区域上方单元的个数,其中,最上面单元的gridy=0。上图的(x, y)是(2, 2)。

gridx和gridy也可以取GridBagConstraints类中所提供的常数RELATIVE。该常数规定,将新加入的组件按照特定的坐标方向放在上一个加入的组件的下一个位置。缺省地,gridx和gridy都取数值RELATIVE。

gridwidth和gridheight

当按照(x, y)坐标放置了组件子后,就可以确定组件的大小了。组件的大小可以用gridwidth和gridheight表示,他们分别表示沿行和列方向所扩充的单元数。在前面的图中,gridwidth和gridheight的值分别是3和2。

也可以用REMAINDER作为gridwidth和gridheight的取值,分别表示该组件扩充到最后一行或最后一列。gridwidth和gridheight可取的另一个常数是RELATIVE,它表示,按照特定的行列值将该组件放在上一个加入的组件的后一个位置。缺省地,gridwidth和gridheight的值均为1。

weightx和weighty

当改变容器大小时,字段weightx和weighty用于分别指定怎样分配多余的水平空间和垂直空间。为了取得所需的用户界面效果,这两个值起着关键的作用。它们可以设置为界于0.0和1.0之间任何双精度类型的值。如果组件的某个权数取了较大的值,那么该组件就会占据该方向上额外的空间。权数为零的组件不占据额外的空间。缺省地,weightx和weighty都设置为0。

fill

当组件的尺寸比其显示区域小时,字段fill就可以发挥作用了,它指定了一个组件在其显示区域内是如何分布的。可以将NONE、HORIZONTAL、VERTICAL以及BOTH中的任何一个值赋给字段fill。当把fll设为NONE时,它表示组件将不会填充显示区域。第二个常数HORIZONTAL使得组件的宽度能够达到仅沿水平方向填满显示区域。常数VERTICAL使得组件的高度能够达到仅沿垂直方向填满显示区域。最后一个常数BOTH使得组件沿水平方向和垂直方向完全填满显示区域。缺省地,fill的值设置为0。

anchor

字段anchor指定当组件小于显示区域时停靠的位置。停靠位置按照地理方位确定。该字段可能的取值有NORTH、NORTHEAST、EAST、SOUTHEAST、SOUTH、SOUTHWEST、WEST、NORTHWEST以及CENTER。缺省地,组件位于显示区域的中心。

insets

insets是AWT中提供的类Insets的类型字段。这个字段用于指定组件的外部填充区域的大小(external padding)——界于组件与其显示区域的边界之间的空间。通过利用Insets类的构造函数Insets(int top, int left, int bottom, int right)创建Insets对象,可以设置这个字段的值。参数top、left、bottom、right分别是四个方向上相对于显示区域边界留出的空间。缺省地,insets字段已经设置成对象Insets(0, 0, 0, 0),也就是没有外部填充区域。

ipadx和ipady

字段ipadx和ipady指定组件的内部填充区域(internal padding)——加在组件现有宽度和高度上的额外宽度和高度值。扩充的部分对组件的宽度和高度同时起作用。因此,额外的宽度和高度分别是ipadx和ipady的两倍。缺省情况下,组件没有内部填充区域。

GridBagLayout代码示例

下面代码清单演示了怎样用无序网格布局在容器内放置组件。程序使用了数值坐标,而不是常数RELATIVE和REMAINDER。

  1. import javax.swing.*;  
  2. import java.awt.*;  
  3.  
  4. public class TGridBagLayout extends JApplet {  
  5.     Container container = null;  
  6.       
  7.     public void init() {  
  8.         //1.Get a handle on the applet's content pane.  
  9.         container = this.getContentPane();  
  10.           
  11.         //2.Set the container to the grid bag layout and define a constraint object.  
  12.         GridBagLayout gridbag = new GridBagLayout();  
  13.         container.setLayout(gridbag);  
  14.         GridBagConstraints c = new GridBagConstraints();  
  15.           
  16.         //3.Common settings for constraint object instant variables.  
  17.         c.fill = GridBagConstraints.BOTH;  
  18.           
  19.         //4.Settings for button B1.  
  20.         c.insets = new Insets(5555);  
  21.         c.gridx = 0;  
  22.         c.gridy = 0;  
  23.         c.gridwidth = 2;  
  24.         c.gridheight = 2;  
  25.         c.weightx = 1.0;  
  26.         c.weighty = 1.0;  
  27.         makeButton("B1", gridbag, c);  
  28.           
  29.         //5.Settings for button B2.  
  30.         c.insets = new Insets(0000);  
  31.         c.gridx = 2;  
  32.         c.gridy = 0;  
  33.         c.gridwidth = 1;  
  34.         c.gridheight = 3;  
  35.         makeButton("B2", gridbag, c);  
  36.           
  37.         //6.Settings for button B3  
  38.         c.gridx = 0;  
  39.         c.gridy = 2;  
  40.         c.gridwidth = 1;  
  41.         c.gridheight = 1;  
  42.         c.weightx = 1;  
  43.         c.weighty = 0.5;  
  44.         makeButton("B3", gridbag, c);  
  45.           
  46.         //7.Settings for button B4.  
  47.         c.gridx = 1;  
  48.         c.gridy = 2;  
  49.         makeButton("B4", gridbag, c);  
  50.     }  
  51.       
  52.     //8.Define the function to create and add a button according to be constraints.  
  53.     public void makeButton(String name, GridBagLayout gridbag, GridBagConstraints c) {  
  54.         JButton button = new JButton(name);  
  55.         gridbag.setConstraints(button, c);  
  56.         container.add(button);  
  57.     }  
  58. }  

相关文章推荐

无序网格布局管理器(GridBagLayou 收藏备用)

无序网格布局管理器 无序网格布局(GridBagLayou)是最灵活,同时也是最复杂的布局管理器,其布局机制多少有些复杂并且令人感到棘手。无序网格布局可以使组件扩充到多行多列,而无须所有组件都具有同...

GridBagLayout布局 java swing

使用GridBagLayout布局的步骤: 1.使用GridBagLayout网格包布局管理器之前应先设置好网格单元,即要把容器划分为几行几列的网格单元    比如:要花分为3行5列的 2.每行每列...

GridBagLayout布局管理器应用详解

很多情况下,我们已经不需要通过编写代码来实现一个应用程序的图形界面,而是通过强大的IDE工具通过拖拽辅以简单的事件处理代码即可很轻松的完成。但是我们不得不面对这样操作存在的一些问题,有时候我们希望能够...

Swing超基础学习总结——3、复杂布局:GridBagLayout

据说是最复杂的布局也是最实用的一个布局GridBagLayout 使用步骤 案例GridBagLayout使用步骤①建立容器(例如JFrame)并设置布局方式:JFrame frame = new J...

java swing中使用GridBagLayout布局的简要介绍

在使用swing做界面的时候,最麻烦的应该就是对界面进行布局。swing客户端不像web那么方便,即使使用GUI工具来布局,也是一件痛苦的事。不过,java提供的布局类中,最强大的就是GridBagL...

java Swing布局管理之GridBagLayout布局

GridBagLayout以表格形式布置容器内的组件,将每个组件放置在每个单元格内,而一个单元格可以跨越多个单元格合并成一个单元格,即多个单元格可以组合成一个单元格,从而实现组件的自由布局。 1.构造...

Java Layout总结-GridBagLayout

GridBagLayout布局管理器: 这就是最复杂的一个布局管理器了,网格包布局.在此布局中,组件大小不必相同. GridBagLayout gb=new GridBagLayout(); ...

网袋布局管理器--GridBagLayout使用介绍

GridBagLayout【常用构造函数】    public GridBagLayout()【特点】:      GridBagLayout是所有AWT布局管理器当中最复杂的,同时他的功能也是最强大...

GridBagLayout布局管理器应用详解

很多情况下,我们已经不需要通过编写代码来实现一个应用程序的图形界面,而是通过强大的IDE工具通过拖拽辅以简单的事件处理代码即可很轻松的完成。但是我们不得不面对这样操作存在的一些问题,有时候我们希望能够...

GridBagLayout的使用

关于Java中GridBagLayout布局管理器的用法。     最近要写一个界面,我却发现一般的布局管理器都不那么好用。上网百度了一下,有人推荐GridBagLayout,却有很多人说GridBa...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swing无序网格布局管理器(GridBagLayout)应用详解
举报原因:
原因补充:

(最多只允许输入30个字)