| 属性 | 功能 |
|---|---|
| columnWidths | 用int数组设置列的宽度, 0代表该列自动宽度 , 数组length并不代表列数 |
| rowHeights | 用int数组设置行的高度, 0代表该行自动高度 , 数组length并不代表行数 |
| columnWeights | 此字段包含对列权重的覆盖。 如果此字段不为空,则在计算所有列权重后将值应用于网格包。 如果 columnWeights[i] > 列 i 的权重,则为列 i 分配 columnWeights[i] 中的权重。 如果 columnWeights 的元素多于列数,则忽略多余的元素 - 它们不会导致创建更多列。 单位是以整个容器的宽度为1, 当只有一列时 , 1代表宽度占满容器 , 当有多列时 , 不会缩小其它列 . 最小也不会压缩子元素 , 所以取值基本是 0至1的浮点数 |
| rowWeights | 此字段保存对行权重的覆盖。 如果此字段不为空,则在计算所有行权重后将值应用于网格包。 如果 rowWeights[i] > 第 i 行的权重,则第 i 行被赋予 rowWeights[i] 中的权重。 如果 rowWeights 的元素多于行数,则忽略多余的元素 - 它们不会导致创建更多行。 |

public GridBagConstraints () {
gridx = RELATIVE;
gridy = RELATIVE;
gridwidth = 1;
gridheight = 1;
weightx = 0;
weighty = 0;
anchor = CENTER;
fill = NONE;
insets = new Insets(0, 0, 0, 0);
ipadx = 0;
ipady = 0;
}
public GridBagConstraints(int gridx, int gridy,
int gridwidth, int gridheight,
double weightx, double weighty,
int anchor, int fill,
Insets insets, int ipadx, int ipady) {
this.gridx = gridx;
this.gridy = gridy;
this.gridwidth = gridwidth;
this.gridheight = gridheight;
this.fill = fill;
this.ipadx = ipadx;
this.ipady = ipady;
this.insets = insets;
this.anchor = anchor;
this.weightx = weightx;
this.weighty = weighty;
}
package gridBagLayoutConstraints;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;
public class GridBagLayoutConstraints两者都不配置的默认2206100909 {
static Frame frame = new Frame(Thread.currentThread().getStackTrace()[1].getClassName());
static GridBagLayout gbl = new GridBagLayout();
static ArrayList<JLabel> lbAl = new ArrayList<>();
static {
frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {frame.dispose();System.exit(0);}});
frame.setBounds(100,50,1024,768); frame.setLayout(gbl);
for(int r=0; r<10; r++)for(int c=0; c<10; c++) {
JLabel jlb = new JLabel("JLabel-C"+c+"R"+r); jlb.setOpaque(true); jlb.setBackground(new Color( (int) (Math.random()*256*256*256+1000000) ));
jlb.setFont(new Font(null, Font.ITALIC, 20) );
frame.add(jlb);
}
}
public static void main(String...arguments) {
frame.setVisible(true);
}
}

package gridBagLayoutConstraints;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;
public class 单独设置GridBagLayout {
static Frame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());
static GridBagLayout gbl = new GridBagLayout();
static ArrayList<JLabel> lbAl = new ArrayList<>();
static {
frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {frame.dispose();System.exit(0);}});
frame.setBounds(100,50, 1024 , 768); frame.setLayout(gbl);
gbl.columnWidths = new int[] {0, 0, 0};
// gbl.columnWeights = new double[] {0.2 , 0.3 , 0.5 };
gbl.rowHeights = new int[] { 0, 0, 0};
// gbl.rowWeights = new double[] {0.5 , 0.2, 0.3 };
for(int r=0; r<1; r++)for(int c=0; c<3; c++) {
JLabel jlb = new JLabel("JLabel-C"+c+"R"+r); jlb.setOpaque(true); jlb.setBackground(new Color( (int) (Math.random()*256*256) ));
jlb.setFont(new Font(null, Font.ITALIC, 20) );
frame.add(jlb);
}
}
public static void main(String...arguments) {
frame.setVisible(true);
}
}

package gridBagLayoutConstraints;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;
public class 单独设置GridBagLayout {
static Frame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());
static GridBagLayout gbl = new GridBagLayout();
static ArrayList<JLabel> lbAl = new ArrayList<>();
static {
frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {frame.dispose();System.exit(0);}});
frame.setBounds(100,50, 1024 , 768); frame.setLayout(gbl);
gbl.columnWidths = new int[] {100, 200, 300};
// gbl.columnWeights = new double[] {0.2 , 0.3 , 0.5 };
gbl.rowHeights = new int[] { 0, 0, 0};
// gbl.rowWeights = new double[] {0.5 , 0.2, 0.3 };
for(int r=0; r<1; r++)for(int c=0; c<3; c++) {
JLabel jlb = new JLabel("JLabel-C"+c+"R"+r); jlb.setOpaque(true); jlb.setBackground(new Color( (int) (Math.random()*256*256) ));
jlb.setFont(new Font(null, Font.ITALIC, 20) );
frame.add(jlb);
}
}
public static void main(String...arguments) {
frame.setVisible(true);
}
}





package gridBagLayoutConstraints;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class 单独设置GridBagConstraints2206111536 {
static Frame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());
static {
frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {frame.dispose();System.exit(0);}});
frame.setLayout(new GridBagLayout()); frame.setBounds(100, 100, 1024, 768);
GridBagConstraints gbc = new GridBagConstraints();
// gbc.insets.left=6; gbc.insets.top=6;
for(int r=0; r<5; r++)for(int c=0; c<5; c++) {
JButton jb = new JButton("R"+r+"C"+c);
gbc.gridx=c; gbc.gridy=r;
frame.add(jb, gbc);
}
}
public static void main(String...arguments) {
frame.setVisible(true);
}
}

package gridBagLayoutConstraints;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class 单独设置GridBagConstraints2206111536 {
static Frame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());
static {
frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {frame.dispose();System.exit(0);}});
frame.setLayout(new GridBagLayout()); frame.setBounds(100, 100, 1024, 768);
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets.left=6; gbc.insets.top=6;
for(int r=0; r<5; r++)for(int c=0; c<5; c++) {
JButton jb = new JButton("R"+r+"C"+c);
gbc.gridx=c; gbc.gridy=r;
frame.add(jb, gbc);
}
}
public static void main(String...arguments) {
frame.setVisible(true);
}
}

package gridBagLayoutConstraints;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class 单独设置GridBagConstraints2206111536 {
static Frame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());
static {
frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {frame.dispose();System.exit(0);}});
frame.setLayout(new GridBagLayout()); frame.setBounds(100, 100, 1024, 768);
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets.left=6; gbc.insets.top=6;
for(int r=0; r<5; r++)for(int c=0; c<5; c++) {
JButton jb = new JButton("R"+r+"C"+c);
if(r==2 || c==3)jb.setText(jb.getText()+"-延长看看");
gbc.gridx=c; gbc.gridy=r;
frame.add(jb, gbc);
}
}
public static void main(String...arguments) {
frame.setVisible(true);
}
}

package gridBagLayoutConstraints;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class 单独设置GridBagConstraints2206111536 {
static Frame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());
static {
frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {frame.dispose();System.exit(0);}});
frame.setLayout(new GridBagLayout()); frame.setBounds(100, 100, 1024, 768);
GridBagConstraints gbc = new GridBagConstraints();
// gbc.insets.left=6; gbc.insets.top=6;
for(int r=0; r<5; r++)for(int c=0; c<5; c++) {
JButton jb = new JButton("R"+r+"C"+c);
gbc.gridx=c; gbc.gridy=r;
if(c==2)gbc.gridwidth=2;
frame.add(jb, gbc);
gbc.gridwidth=1;
}
}
public static void main(String...arguments) {
frame.setVisible(true);
}
}
if(c==2)gbc.gridwidth=2; 将第三列的gridwidth设为2, 发现看不到第4列, 也看不到C2第三列双倍宽度, 因为列宽没有基准, 设置列宽基准要用GridLayout的属性

用GridLayout的columnWidths 给列宽设置一个基准
package gridBagLayoutConstraints;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class gridWidthHeight需不需要设置GridBagLayout的网格数2206130658 {
static Frame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());
static {
frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {frame.dispose();System.exit(0);}});
frame.setBounds(100, 100, 1024, 768);
GridBagLayout gbl = new GridBagLayout();
gbl.columnWidths = new int[] {100 , 100 , 100 , 100 , 100};
// gbl.columnWidths = new int[] {100 , 110 , 120 , 130 , 140 , 150 };
frame.setLayout(gbl);
System.out.println(frame.getLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.WEST;
gbc.fill = GridBagConstraints.HORIZONTAL;
// gbc.insets.left=6; gbc.insets.top=6;
for(int r=0; r<5; r++)for(int c=0; c<5; c++) {
JButton jb = new JButton("R"+r+"C"+c);
gbc.gridx=c; gbc.gridy=r;
if(c==2)gbc.gridwidth=2;
if(c==3)continue;
frame.add(jb, gbc);
gbc.gridwidth=1;
}
}
public static void main(String...arguments) {
frame.setVisible(true);
}
}

C2第三列有双倍宽度了
单用GridLayout 的 columnWeights 也可以确定基准
package gridBagLayoutConstraints;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class gridWidthHeight需不需要设置GridBagLayout的网格数2206141448 {
static Frame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());
static {
frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {frame.dispose();System.exit(0);}});
frame.setBounds(100, 100, 1024, 768);
GridBagLayout gbl = new GridBagLayout();
gbl.columnWeights = new double[] {0.1, 0.1 , 0.1 , 0.1 , 0.1};
frame.setLayout(gbl);
System.out.println(frame.getLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.WEST;
gbc.fill = GridBagConstraints.HORIZONTAL;
// gbc.insets.left=6; gbc.insets.top=6;
for(int r=0; r<5; r++)for(int c=0; c<5; c++) {
JButton jb = new JButton("R"+r+"C"+c);
gbc.gridx=c; gbc.gridy=r;
if(c==2)gbc.gridwidth=2;
if(c==3)continue;
frame.add(jb, gbc);
gbc.gridwidth=1;
}
}
public static void main(String...arguments) {
frame.setVisible(true);
}
}

package gridBagLayoutConstraints;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class 单独设置GridBagConstraintsGridxGridy始终为0 {
static Frame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());
static {
frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {frame.dispose();System.exit(0);}});
frame.setLayout(new GridBagLayout()); frame.setBounds(100, 100, 1024, 768);
GridBagConstraints gbc = new GridBagConstraints();
// gbc.insets.left=6; gbc.insets.top=6;
for(int r=0; r<5; r++)for(int c=0; c<5; c++) {
JButton jb = new JButton("R"+r+"C"+c);
gbc.gridx=0; gbc.gridy=0;
frame.add(jb, gbc);
}
}
public static void main(String...arguments) {
frame.setVisible(true);
// frame.remove(0);
}
}

如果移除第一个元素 frame.remove(0); 则没有了 Jframe要getContentPane().remove(0)
package gridBagLayoutConstraints;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class 单独设置GridBagConstraintsGridxGridy始终为0 {
static JFrame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());
static {
frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {frame.dispose();System.exit(0);}});
frame.setLayout(new GridBagLayout()); frame.setBounds(100, 100, 1024, 768);
GridBagConstraints gbc = new GridBagConstraints();
// gbc.insets.left=6; gbc.insets.top=6;
for(int r=0; r<5; r++)for(int c=0; c<5; c++) {
JButton jb = new JButton("R"+r+"C"+c);
gbc.gridx=0; gbc.gridy=0;
frame.add(jb, gbc);
}
}
public static void main(String...arguments) {
frame.setVisible(true);
frame.getContentPane().remove(0);
}
}

package gridBagLayoutConstraints;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class 单独设置GridBagConstraintsGridxGridy始终为负一 {
static JFrame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());
static {
frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {frame.dispose();System.exit(0);}});
frame.setLayout(new GridBagLayout()); frame.setBounds(100, 100, 1024, 768);
GridBagConstraints gbc = new GridBagConstraints();
// gbc.insets.left=6; gbc.insets.top=6;
for(int r=0; r<5; r++)for(int c=0; c<5; c++) {
JButton jb = new JButton("R"+r+"C"+c);
gbc.gridx=-1; gbc.gridy=GridBagConstraints.RELATIVE;
frame.add(jb, gbc);
}
}
public static void main(String...arguments) {
frame.setVisible(true);
frame.getContentPane().remove(0);
}
}
