GridBagLayout使用稍微繁琐,但是非常的灵活。可以实现任意效果。下面提供2个例子供学习参考:
例子二:
效果图:
package com.opentcs.customization;
import java.awt.Button;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
public class GridBagLayoutTest {
public static void main(String[] args) {
// TODO 自动生成的方法存根
JFrame f = new JFrame();
GridBagLayout gb = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
Button[] bs = new Button[10];
f.setLayout(gb);
for (int i = 0; i < bs.length; ++i) {
bs[i] = new Button("button" + i);
}
// 所有组件都可以在横向、纵向扩大
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 1;
gb.setConstraints(bs[0], gbc);
f.add(bs[0]);
gb.setConstraints(bs[1], gbc);
f.add(bs[1]);
gb.setConstraints(bs[2], gbc);
f.add(bs[2]);
// 该GridBagConstraints控制的GUI组件将会成为横向最后一个组件
gbc.gridwidth = GridBagConstraints.REMAINDER;
gb.setConstraints(bs[3], gbc);
f.add(bs[3]);
// 该GridBagConstraints控制的GUI组件将在横向不会扩大
gbc.weightx = 0;
gb.setConstraints(bs[4], gbc);
f.add(bs[4]);
// 该GridBagConstraints控制的GUI组件将横跨两个网格
gbc.gridwidth = 2;
gb.setConstraints(bs[5], gbc);
f.add(bs[5]);
// 该GridBagConstraints控制的GUI组件将横跨一个网格
gbc.gridwidth = 1;
// 该GridBagConstraints控制的GUI组件将纵跨两个网格
gbc.gridheight = 2;
// 该GridBagConstraints控制的GUI组件将会成为横向最后一个组件
gbc.gridwidth = GridBagConstraints.REMAINDER;
gb.setConstraints(bs[6], gbc);
f.add(bs[6]);
// 该GridBagConstraints控制的GUI组件将横向跨一个网格,纵向跨两个网格
gbc.gridwidth = 1;
gbc.gridheight = 2;
// 该GridBagConstraints控制的GUI组件纵向扩大的权重是1
gbc.weighty = 1;
gb.setConstraints(bs[7], gbc);
f.add(bs[7]);
// 设置下面的按钮在纵向不会扩大
gbc.weighty = 0;
// 该GridBagConstraints控制的GUI组件将会成为横向最后一个组件
gbc.gridwidth = GridBagConstraints.REMAINDER;
// 该GridBagConstraints控制的GUI组件将纵向跨一个网格
gbc.gridheight = 1;
gb.setConstraints(bs[8], gbc);
f.add(bs[8]);
gb.setConstraints(bs[9], gbc);
f.add(bs[9]);
f.setSize(800, 600);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null);
}
}例子二:
package com.opentcs.customization;
import java.awt.Button;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
public class CGridBagLayout {
public static void main(String[] args) {
JFrame f = new JFrame();
GridBagLayout gb = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
Button[] btn = new Button[10];
f.setLayout(gb);
for (int i = 0; i < btn.length; ++i)
{
btn[i] = new Button("BUTTON"+i);
}
//所有组件都可以在横向、纵向扩大
gbc.fill = GridBagConstraints.BOTH;
//该GridBagConstraints控制的GUI组件左对齐
gbc.anchor = GridBagConstraints.WEST;
//该GridBagConstraints控制的GUI组件纵向、横向扩大的权重是1
gbc.weighty = 1;
gbc.weightx = 1;
//该GridBagConstraints控制的GUI组件将横向跨一个网格,纵向跨两个网格
gbc.gridwidth = 1; gbc.gridheight = 2;
gb.setConstraints(btn[0], gbc);
f.add(btn[0]);
//该GridBagConstraints控制的GUI组件将横向跨两个网格,纵向跨一个网格
gbc.gridwidth = 2; gbc.gridheight = 1;
gb.setConstraints(btn[1], gbc);
f.add(btn[1]);
//该GridBagConstraints控制的GUI组件将横向跨一个网格,纵向跨两个网格
gbc.gridwidth = 1; gbc.gridheight = 2;
//该GridBagConstraints控制的GUI组件将会成为横向最后一个组件
gbc.gridwidth = GridBagConstraints.REMAINDER;
gb.setConstraints(btn[2], gbc);
f.add(btn[2]);
gbc.gridx = 1; gbc.gridy = 1;//第二行,第二列
//该GridBagConstraints控制的GUI组件将横向跨两个网格,纵向跨一个网格
gbc.gridwidth = 2; gbc.gridheight = 1;
gb.setConstraints(btn[3], gbc);
f.add(btn[3]);
gbc.gridx = 0; gbc.gridy = 2;//第三行,第一列
//该GridBagConstraints控制的GUI组件将横向跨一个网格,纵向跨两个网格
gbc.gridwidth = 1; gbc.gridheight = 2;
gb.setConstraints(btn[4], gbc);
f.add(btn[4]);
gbc.gridx = 1; gbc.gridy = 2;//第三行,第二列
//该GridBagConstraints控制的GUI组件将纵向、横向跨一个网格
gbc.gridwidth = 1; gbc.gridheight = 1;
gb.setConstraints(btn[5], gbc);
f.add(btn[5]);
gbc.gridx = 2; gbc.gridy = 2;//第三行,第三列
gb.setConstraints(btn[6], gbc);
f.add(btn[6]);
gbc.gridx = 3; gbc.gridy = 2;//第三行,第四列
//该GridBagConstraints控制的GUI组件将横向跨一个网格,纵向跨两个网格
gbc.gridwidth = 1; gbc.gridheight = 2;
//该GridBagConstraints控制的GUI组件将会成为横向最后一个组件
gbc.gridwidth = GridBagConstraints.REMAINDER;
gb.setConstraints(btn[7], gbc);
f.add(btn[7]);
gbc.gridx = 1; gbc.gridy = 3;//第四行,第二列
//该GridBagConstraints控制的GUI组件将纵向跨两个网格
gbc.gridwidth = 1; gbc.gridheight = 1;
gb.setConstraints(btn[8], gbc);
f.add(btn[8]);
gbc.gridx = 2; gbc.gridy = 3;//第三行,第三列
gb.setConstraints(btn[9], gbc);
f.add(btn[9]);
f.setSize(800, 600);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null);
}
}效果图:


收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2314
- 用户1336
- 访客11813325
每日一句
Let's seek joy in the simple, quiet moments.
让我们在简单宁静的时刻中寻找快乐。
让我们在简单宁静的时刻中寻找快乐。