`
jgeng
  • 浏览: 10933 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

GridBagLayout 以及 GridBagConstraints 用法(转载)

阅读更多
GridBagLayout是一个灵活的布局管理器,部件如果想加入其中需借助GridBagConstraints,其中有若干个参数,解释如下:
gridx/gridy:组件的横纵坐标
gridwidth:组件所占列数,也是组件的宽度
gridheight:组件所占行数,也是组件的高度
fill:当组件在其格内而不能撑满其格时,通过 fill的值来设定填充方式,有四个值
ipadx:组件间的横向间距
ipady:组件间的纵向间距
insets:当组件不能填满其格时,通过 insets来指定四周(即上下左右)所留空隙
anchor:同样是当组件不能填满其格时,通过 anchor来设置组件的位置,anchor有两种值,绝对和相对的值分别有 若干个,文档中有,可自行查看
weightx:行的权重,通过这个属性来决定如何分配行的剩余空间
weighty:列的权重,通过这个属性来决定如何分配列的剩余空间

1.要明确一点概念:每个 GridBagLayout 对象维持一个动态的矩形单元网格,每个组件占用一个或多个这样的单元,称为显示区域。
网格的总体方向取决于容器的 ComponentOrientation 属性。对于水平的从左到右的方向,网格坐标 (0,0) 位于容器的左上角,其中 X 向右递增,Y 向下递增。
2.java API说明如下:“每个由 GridBagLayout 管理的组件都与 GridBagConstraints 的实例相关联。Constraints 对象指定组件在网格中的显示区域以及组件在其显示区域中的放置方式。”
例如,如下几行代码就可以添加其它组件:


        

[code="java"] GridBagLayout gridbag = new GridBagLayout();
         GridBagConstraints c = new GridBagConstraints();
         JFrame   f=new JFrame();
         f.setLayout(gridbag);
         Button button = new Button(name);
         gridbag.setConstraints(button, c);
         f.add(jButton);

3.为了有效使用网格包布局,必须我认为只要能掌握以下四种参数就能很好的使用GidBagLayout:
(1)GridBagConstraints.gridwidthGridBagConstraints.gridheight
    指定组件的显示区域行(针对 gridwidth)或列(针对 gridheight)中的单元数。默认值为 1。如下向窗口中添加一个占两个单元格(两行一列)的按钮的例子:


        

[code="java"] JFrame   f=new JFrame();
         GridBagLayout gridbag = new GridBagLayout();
         GridBagConstraints c = new GridBagConstraints();
         f.setLayout(gridbag);
         c.gridheight=2;
         c.gridwidth=1;
         JButton jButton = new JButton("按钮1");
         gridbag.setConstraints(button, c);
         f.add(jButton);

(2)GridBagConstraints.fill
    当组件的显示区域大于组件的所需大小时,用于确定是否(以及如何)调整组件。
    可能的值为 GridBagConstraints.NONE(默认值)、
              GridBagConstraints.HORIZONTAL(加宽组件直到它足以在水平方向上填满其显示区域,但不更改其高度)、              
              GridBagConstraints.VERTICAL(加高组件直到它足以在垂直方向上填满其显示区域,但不更改其宽度)和                 
            GridBagConstraints.BOTH(使组件完全填满其显示区域)。
    使用情景举例:在一个很大的窗口(如300*300)中添加一个按钮(原始大小40*30)。
(3)GridBagConstraints.anchor
    当组件小于其显示区域时,用于确定将组件置于何处(在显示区域中)。可能的值有两种:相对和绝对。相对值的解释是相对于容器的ComponentOrientation 属性,而绝对值则不然。个人觉得只使用绝对值就可以。有效值有:
    绝对值
    GridBagConstraints.NORTH
    GridBagConstraints.SOUTH
    GridBagConstraints.WEST
    GridBagConstraints.EAST
    GridBagConstraints.NORTHWEST
    GridBagConstraints.NORTHEAST
    GridBagConstraints.SOUTHWEST
    GridBagConstraints.SOUTHEAST
    GridBagConstraints.CENTER (the default)

(4)GridBagConstraints.weightx、GridBagConstraints.weighty   (************最重要的属性)
用于确定分布空间的方式,这对于指定调整行为至关重要。例如:在一个很大的窗口(如300*300)中添加两个按钮(也可以是面板)(原始大小 40*30),默认的,你会发现两个按钮分别处于上下两个等大小的区域中,且只占用了一小部分,没有被按钮占用的区域就被称为额外区域。该额外区域会随着参数weightx、weighty而被分配。

   完整的示例代码如下:


[code="java"]import javax.swing.*;
import java.util.*;
import java.awt.*;
public class Example{
     public Example() {
     }
     public static void main(String args[]) {
        JFrame f = new JFrame("GridBag Layout Example");
        GridBagLayout gridbag = new GridBagLayout();
        GridBagConstraints c = new GridBagConstraints();
        f.setLayout(gridbag);
//添加按钮1
        c.fill = GridBagConstraints.BOTH;
        c.gridheight=2;
        c.gridwidth=1;
        c.weightx=0.0;//默认值为0.0
        c.weighty=0.0;//默认值为0.0
        c.anchor=GridBagConstraints.SOUTHWEST;
        JButton jButton1 = new JButton("按钮1");
        gridbag.setConstraints(jButton1, c);
        f.add(jButton1);
//添加按钮2      
        c.fill = GridBagConstraints.NONE;
        c.gridwidth=GridBagConstraints.REMAINDER;
        c.gridheight=1;
        c.weightx=1.0;//默认值为0.0
        c.weighty=0.8;
        JButton jButton2 = new JButton("按钮2");
        gridbag.setConstraints(jButton2, c);
        f.add(jButton2);
//添加按钮3
        c.fill = GridBagConstraints.BOTH;
        c.gridwidth=1;
        c.gridheight=1;
        c.weighty=0.2;
        JButton jButton3 = new JButton("按钮3");
        gridbag.setConstraints(jButton3, c);
        f.add(jButton3);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(500,500);
        f.setVisible(true);
     }
}

gridx,gridy —— 设置组件的位置,
gridx设置为GridBagConstraints.RELATIVE代表此组件位于之前所加入组件的右边。
gridy设置为GridBagConstraints.RELATIVE代表此组件位于以前所加入组件的下面。
建议定义出gridx,gridy的位置以便以后维护程序。gridx=0,gridy=0时放在0行0列。

gridwidth,gridheight —— 用来设置组件所占的单位长度与高度,默认值皆为1。
你可以使用GridBagConstraints.REMAINDER常量,代表此组件为此行或此列的最后一个组件,而且会占据所有剩余的空间。

weightx,weighty —— 用来设置窗口变大时,各组件跟着变大的比例。
当数字越大,表示组件能得到更多的空间,默认值皆为0。

anchor —— 当组件空间大于组件本身时,要将组件置于何处。
有CENTER(默认值)、NORTH、NORTHEAST、EAST、SOUTHEAST、WEST、NORTHWEST选择。

insets —— 设置组件之间彼此的间距。
它有四个参数,分别是上,左,下,右,默认为(0,0,0,0)。

ipadx,ipady —— 设置组件间距,默认值为0。

GridBagLayout里的各种设置都必须通过GridBagConstraints,因此当我们将GridBagConstraints的参数都设置
好了之后,必须new一个GridBagConstraints的对象出来,以便GridBagLayout使用。


构造函数:
GirdBagLayout()建立一个新的GridBagLayout管理器。
GridBagConstraints()建立一个新的GridBagConstraints对象。
GridBagConstraints(int gridx,int gridy,
int gridwidth,int gridheight,
double weightx,double weighty,
int anchor,int fill, Insets insets,
int ipadx,int ipady)建立一个新的GridBagConstraints对象,并指定其参数的值。
分享到:
评论

相关推荐

    Java中GridBagLayout的用法

    ### Java中GridBagLayout的用法详解 #### 一、GridBagLayout简介 GridBagLayout是一种高度灵活且功能强大...掌握了GridBagLayout的使用方法后,不仅可以轻松应对各种用户界面的设计需求,还能使界面更加美观、实用。

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

    下面我们将深入探讨`GridBagLayout`的使用方法和关键特性。 `GridBagLayout`的构造函数很简单,只有一个无参数的构造函数`public GridBagLayout()`。当你将这个布局管理器设置给容器时,如`this.setLayout(new ...

    java网格包GridBagLayout布局管理器专题

    GridBagLayout通过GridBagConstraints对象来设置组件的约束,从而确定它们在网格中的位置和大小。 在使用GridBagLayout时,主要涉及以下几个核心概念: 1. **GridBagConstraints对象**:这是一个用来存储组件约束...

    JAVA布局模式:GridBagConstraints终极技巧

    `GridBagConstraints`是Java Swing中的一个类,用于在`GridBagLayout`布局管理器中控制组件的位置和大小。本篇文章将深入探讨`GridBagConstraints`的终极技巧,帮助开发者更好地理解和运用这一强大的布局工具。 `...

    GridBagLayout布局详解

    GridBagLayout 布局详解 GridBagLayout 是 Java Swing 编程中的一种强大且灵活的布局管理器,它可以实现几乎所有你想要的布局。通过设置 GridBagConstraints 对象的参数,可以控制组件在显示区域中的位置、大小和...

    Java注册界面设计.doc

    8. Java 中的 GUI 组件布局:使用 GridBagLayout 和 GridBagConstraints 布局 GUI 组件。 本文展示了如何使用 Java 语言设计和实现注册界面,包括了 GUI 组件的使用、事件处理机制和布局管理等方面的知识点。

    Java中GridBagLayout管理器实例.pdf

    - **设定容器和布局管理方式**:使用`setLayout(GridBagLayout)`方法将容器的布局设为`GridBagLayout`。 - **设定GridBagConstraints对象的属性**:包括`weightx`、`weighty`、`fill`、`gridwidth`、`gridheight`...

    Java 最重要布局管理器GridBagLayout的使用方法

    下面我们将详细探讨`GridBagLayout`的使用方法及其关键特性。 1. **GridBagLayout的原理** `GridBagLayout`维护了一个动态的矩形网格,每个组件对应一个显示区域,这些区域可以跨越多个网格单元。网格的大小和位置...

    GridBagLayout && JTable 排序

    代码可能包括创建`JTable`,定义布局(可能使用了`GridBagLayout`),实现排序逻辑,以及处理用户的交互事件。 为了深入理解这个示例,你需要阅读`SortableTableExample.java`的源代码,了解其具体的实现细节。这...

    java中GridBagLayout布局管理器的详细讲解.doc

    ### Java中GridBagLayout布局...掌握了这两种工具的使用方法后,可以轻松应对大多数Java GUI应用的布局设计工作。希望本文能够帮助读者更好地理解和运用`GridBagLayout`布局管理器及其相关的`GridBagConstraints`类。

    java网格包GridBagLayout布局管理器专题借鉴.pdf

    3. 使用GridBagLayout的`setConstraints(Component com, GridBagConstraints cons)`方法将约束添加到组件中,使得组件具备了约束条件。 4. 最后,将设置了约束的组件添加到容器中。 另一种使用方式是直接在添加组件...

    java网格包GridBagLayout布局管理器专题的分析.pdf

    3. 使用GridBagLayout的setConstraints方法,将组件和对应的GridBagConstraints对象关联起来。这一步实际上是设置了组件的约束条件。 4. 最后,将设置了约束的组件添加到容器中,通常使用容器的add方法完成。 ...

    matlab开发-GridBagLayout.zip

    3. **布局管理**:使用`setLayout`函数将GridBagLayout添加到GUI容器中,然后使用`add`函数将组件和对应的GridBagConstraints对象添加到布局中。 4. **动态调整**:GridBagLayout的一个优势在于它可以很好地处理...

    GridBagLayout布局器的使用

    Java Swing GridBagLayout,很详细的Demo,对GridBagLayout如何使用做全面的讲解

    java网格包GridBagLayout布局管理器专题.pdf

    接着,使用 GridBagLayout 网格包布局中的 setConstraints(Component com, GridBagConstraints cons) 方法将 GridBagConstraints 类型对象设置的约束添加到被设置的组件中。最后,将设置了约束的组件添加到容器中。 ...

    GridBagLayout布局管理器的运用

    这是为初初学者提供练习的代码,具有很强的指导效果哈~~~

    matlab开发-GridBagLayout

    总的来说,`GridBagLayout`是MATLAB GUI开发中一个重要的布局工具,通过理解和掌握其工作原理和使用方法,可以极大地提升GUI的美观度和用户体验。对于那些需要创建定制化、动态或响应式界面的开发者来说,`...

    html的table标签作配置,进行swing的GridBagLayout布局

    原创,为完整java工程包。根据html的table标签作为配置文件,进行swing ...具体思想是将tabel td等标签相关元素和属性映射成GridBagConstraints的属性值,将布局独立到配置文件,从而简化代码中关于布局的复杂度

    Swing的GridBagLayout布局应用详解(附Java源代码)

    本文通过代码示例的方式介绍了Swing的GridBagLayout布局样式的应用,不拘泥于JDK文档教条方式的陈述,图形效果图与文字相结合,讲解直观而浅显易懂,另外,示例代码中还包含了BorderLayout、FlowLayout等布局的应用...

Global site tag (gtag.js) - Google Analytics