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

关于Java中GridBagLayout布局管理器的用法

    博客分类:
  • java
阅读更多

原文链接:http://sword03.blog.sohu.com/26246269.html

关于Java中GridBagLayout布局管理器的用法。
    最近要写一个界面,我却发现一般的布局管理器都不那么好用。上网百度了一下,有人推荐GridBagLayout,却有很多人说GridBagLayout不好用,看不懂。

    于是我仔细查了一下java API,感觉掌握GridBagLayout最简单的用法还是蛮简单的,也是很有必要的。因为个人不喜欢绝对定位,而使用相对定位的话就必须用到GridBagLayout,主要是由于其它的几个布局管理器太简单,可操作性差。
总结了GridBagLayout的用法中的关键点如下:

1.要明确一点概念:每个 GridBagLayout 对象维持一个动态的矩形单元网格,每个组件占用一个或多个这样的单元,称为显示区域。
  网格的总体方向取决于容器的 ComponentOrientation 属性。对于水平的从左到右的方向,网格坐标 (0,0) 位于容器的左上角,其中 X 向右递增,Y 向下递增。

2.要使用GidBagLayout要先定义一个GridBagConstraints对象。
  java API说明如下:“每个由 GridBagLayout 管理的组件都与 GridBagConstraints 的实例相关联。Constraints 对象指定组件在网格中的显示区域以及组件在其显示区域中的放置方式。”
  例如,如下几行代码就可以添加其它组件:
         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.为了有效使用网格包布局,必须自定义与组件相关联的一个或多个 GridBagConstraints 对象。
  即须设置GridBagConstraints 对象的属性。我认为只要能掌握以下四种参数就能很好的使用GidBagLayout:
(1)GridBagConstraints.gridwidthGridBagConstraints.gridheight
    指定组件的显示区域行(针对 gridwidth)或列(针对 gridheight)中的单元数。默认值为 1。如下向窗口中添加一个占两个单元格(两行一列)的按钮的例子:
         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而被分配。


   完整的示例代码如下:

 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);
     }
 }

    在上述代码中添加按钮2时c.weighty=0.8,而在添加按钮3时c.weighty=0.2,这就会导致按钮2所占区域的高大约是按钮3所占区域的高的0.8/0.2=4倍。

分享到:
评论
1 楼 我有理 2009-06-23  
  我这里有一种方法可以方便地向网格包布局管理器添加控件,有啥不足之处还望指出!
   import java.awt.*;
import java.awt.event.WindowListener;
public class Yi extends Frame {

private static final WindowListener Yi = null;
/**
* @param args
*/
TextField tf;   TextArea ta;
Button b1,b2,b3;
GridBagLayout gb;  GridBagConstraints gc;
public Yi(String title)
{
super(title);
gb=new GridBagLayout();
gc=new GridBagConstraints();
setLayout(gb);
tf=new TextField();
ta=new TextArea();
b1=new Button("确定");
b2=new Button("取消");
b3=new Button("哈哈");
gc.fill=GridBagConstraints.BOTH;
adComponent(tf,1,1,1,3);
adComponent(ta,2,1,3,3);
adComponent(b1,5,1,1,1);
adComponent(b2,5,2,1,1);
adComponent(b3,5,3,1,2);
addWindowListener(new CloseWindow());

}
public void adComponent(Component c, int row,int col,int   nrow, int ncol)
{

gc.gridx=col;
gc.gridy=row;
gc.gridheight=nrow;
gc.gridwidth=ncol;
gb.setConstraints(c, gc);
this.add(c);


}
public static void main(String[] args) {
// TODO Auto-generated method stub
        Yi f=new Yi("网格包的实例");
       
        f.setSize(500, 500);
        f.setVisible(true);
}

}

相关推荐

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

    Java中的GridBagLayout布局管理器是Java Swing中用于组织组件的一种高级布局策略,它提供了最大的灵活性,能够处理不同大小的组件并允许它们跨多个网格单元,甚至部分重叠。GridBagLayout通过GridBagConstraints对象...

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

    ### Java中GridBagLayout布局管理器的详细讲解 #### 一、引言 在Java图形用户界面(GUI)设计中,界面布局是非常重要的一个环节。合理的布局不仅能够提高应用程序的美观性,还能够提升用户体验。Java提供了多种...

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

    Java 网格包 GridBagLayout 布局管理器是 Java 语言中最复杂和灵活的布局管理器之一。与网格布局管理器不同的是,网格包布局管理器允许容器中各个组件的大小各不相同,还允许组件跨越多个网格,也允许组件之间相互...

    Java中GridBagLayout的用法

    GridBagLayout是一种高度灵活且功能强大的布局管理器,在Java Swing图形用户界面编程中被广泛使用。相较于其他布局管理器如FlowLayout或BorderLayout,GridBagLayout提供更精细的控制能力,允许开发者精确地指定组件...

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

    在Java Swing中,`GridBagLayout`是一种非常灵活的布局管理器,允许开发者精确控制组件在容器中的位置和大小。由于其灵活性,`GridBagLayout`成为创建复杂、自定义布局的理想选择,但它的确比其他布局管理器更复杂。...

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

    Java中的GridBagLayout布局管理器是Java Swing中最复杂但也是最灵活的布局管理工具,它允许组件在容器中以不同的大小存在,甚至可以跨多个网格并部分重叠。这种布局管理器将容器划分为一系列网格单元,每个组件可以...

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

    Java中的GridBagLayout布局管理器是Java Swing中最复杂但也是最灵活的布局管理工具,它允许容器中的组件具有不同的大小,可以跨越多个网格,并且组件之间可以部分重叠。理解GridBagLayout的关键在于掌握它的网格单元...

    Java中GridBagLayout管理器实例.pdf

    在Java GUI编程中,`GridBagLayout`是一个强大的布局管理器,它允许开发者精确地控制组件在容器中的位置和大小。与其他布局管理器不同,`GridBagLayout`提供了更大的灵活性,使得开发者能够创建复杂的界面布局。以下...

    谈谈Java中的布局管理器.pdf

    Java中的布局管理器可以分为七种:流布局管理器(FlowLayout)、边界布局管理器(BorderLayout)、网格布局管理器(GridLayout)、卡片布局管理器(CardLayout)、盒式布局管理器(BoxLayout)、网格袋布局管理器...

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

    Java中的`GridBagLayout`是Swing库中最强大的布局管理器之一,允许开发者创建复杂的、自适应的用户界面。这个布局管理器通过一个网格来组织组件,每个组件可以在网格中占据一个或多个单元格,提供了极大的灵活性。...

    java布局管理器实例

    Java中的布局管理器是构建图形用户界面(GUI)的关键元素,它们负责自动调整和组织窗口内的组件。在Java AWT和Swing库中,布局管理器使得开发者无需精确设定每个组件的位置和大小,就能创建出适应不同屏幕尺寸和...

    五种布局管理器的经典例子

    在Java GUI编程中,布局管理器是至关重要的组成部分,它负责控制组件在窗口中的位置和大小。本资源提供了五种常见的布局管理器的经典例子,帮助开发者更好地理解和运用这些管理器。下面将详细介绍这五种布局管理器...

    Java中BorderLayout布局管理器.pdf

    Java中的BorderLayout布局管理器是Java AWT(Abstract Window Toolkit)包中的一种基本布局管理器,主要用于组织和管理GUI(图形用户界面)组件在容器内的布局。这种布局将容器分为五个区域:北(North)、南(South...

    使用布局管理器布局界面.rar

    在编程领域,尤其是在开发图形用户界面(GUI)时,布局管理器是一个不可或缺的工具。...这份"使用布局管理器布局界面"的内部资料,将帮助你深入理解各种语言中布局管理器的用法,提高你的GUI开发技能。

    Swing布局管理器

    例如,在`addImpl()`方法中,如果布局管理器存在,则会调用`addLayoutComponent()`方法来更新布局;而在`remove()`方法中,当删除组件时,会调用`removeLayoutComponent()`方法来更新布局。 这种设计模式被称为**...

    GridBagLayout && JTable 排序

    在Java Swing中,`GridBagLayout`是一种灵活的布局管理器,它允许开发者精确地控制组件在容器中的位置和大小。而`JTable`是Swing提供的一种用于展示表格数据的组件,通常用于数据的显示、编辑和排序。这篇博客文章...

    布局管理器及事件处理代码

    - GridBagLayout:最灵活的布局管理器,允许自定义组件大小和位置,但使用较为复杂。 2. **Android布局管理器**: - Linear Layout:沿着垂直或水平方向线性排列子视图。 - Relative Layout:根据相对位置关系来...

    java 如何使用BoxLayout布局管理器

    本篇文章将深入探讨如何在Java中有效地使用BoxLayout布局管理器。 首先,我们需要了解BoxLayout的基本概念。BoxLayout允许组件沿着一个轴线进行排列,轴线可以是X轴(水平方向),Y轴(垂直方向),或者Z轴(对于3D...

    java swing 布局管理

    Java Swing 提供了多种内置的布局管理器,每种都有其特定的用法和效果: 1. ** FlowLayout **:流式布局,按照从左到右,从上到下的顺序排列组件。当一行无法容纳所有组件时,会在下一行继续放置。 2. ** ...

Global site tag (gtag.js) - Google Analytics