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

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倍。

转载:http://sword03.blog.sohu.com/26246269.html
GridBagLayoutJava最灵活和最复杂的布局管理器之一,它可以让开发者在窗口创建复杂的布局。它提供了一个网格和一个包含网格的单元格,网格的每个单元格都可以放置一个组件,而单元格的大小可以根据需要进行调整。 GridBagLayout布局管理器的实现非常灵活,允许您将组件放置在网格的任何位置,并根据需要为它们分配任意数量的行和列。由于其灵活性,使用GridBagLayout可能会比其他布局管理器更具挑战性,但是一旦掌握了它,您就可以创建出非常复杂的布局。 下面是一个简单的Java应用程序,用于演示如何使用GridBagLayout布局管理器: ```java import java.awt.*; import javax.swing.*; public class GridBagLayoutDemo { public static void main(String[] args) { JFrame frame = new JFrame("GridBagLayout Demo"); JPanel panel = new JPanel(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.insets = new Insets(5, 5, 5, 5); gbc.gridx = 0; gbc.gridy = 0; panel.add(new JLabel("Name:"), gbc); gbc.gridx = 1; gbc.gridy = 0; panel.add(new JTextField(20), gbc); gbc.gridx = 0; gbc.gridy = 1; panel.add(new JLabel("Address:"), gbc); gbc.gridx = 1; gbc.gridy = 1; panel.add(new JTextField(20), gbc); frame.add(panel); frame.setSize(300, 200); frame.setVisible(true); } } ``` 在这个示例应用程序,我们首先创建一个JFrame和一个JPanel。然后,我们将JPanel的布局管理器设置为GridBagLayout。 接下来,我们创建一个GridBagConstraints对象,并设置它的insets属性为一个Insets对象。Insets对象是一个包含四个整数值的对象,它们分别表示组件之间的左、上、右、下边距。在这个示例,我们将insets设置为5像素。 然后,我们使用gbc对象来指定每个组件的网格坐标,即它们应该在网格的哪个位置。我们还可以使用gbc对象来指定每个组件应该占用的行和列的数量。 最后,我们将所有组件添加到JPanel,并将JPanel添加到JFrame。我们还设置了JFrame的大小并使其可见。 这只是GridBagLayout的一个简单示例,但它应该足以让您开始使用这个灵活的布局管理器。要深入了解GridBagLayout的更复杂的特性和用法,请参阅Java官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值