
1 import java.awt.Font; 2 import java.awt.GridBagConstraints; 3 import java.awt.GridBagLayout; 4 import java.awt.Insets; 5 6 import javax.swing.JButton; 7 import javax.swing.JFrame; 8 import javax.swing.JPanel; 9 import javax.swing.UIManager; 10 11 public class Test extends JFrame { 12 13 private static final long serialVersionUID = -2397593626990759111L; 14 15 private JPanel pane = null; 16 17 private JButton b_1 = null, b_2 = null, b_3 = null, b_4 = null, b_5 = null; 18 19 private int gridx, gridy, gridwidth, gridheight, anchor, fill, ipadx, 20 ipady; 21 22 private double weightx, weighty; 23 24 private Insets insert = null; 25 26 private GridBagLayout grigbag = null; 27 28 private GridBagConstraints gridbagconstraints = null; 29 30 public Test() { 31 super("Test"); 32 33 // 设置按钮字体 34 UIManager.put("Button.font", new Font("Dialog", Font.PLAIN, 12)); 35 36 pane = new JPanel(); 37 38 // 五个按钮,按钮名为X、Y坐标,横与列所占单元格数 39 b_1 = new JButton("b_1"); 40 b_2 = new JButton("b_2"); 41 b_3 = new JButton("b_3"); 42 b_4 = new JButton("b_4"); 43 b_5 = new JButton("b_5"); 44 45 grigbag = new GridBagLayout(); 46 pane.setLayout(grigbag); 47 48 gridx = 0; // X0 49 gridy = 0; // Y0 50 gridwidth = 1; // 横占一个单元格 51 gridheight = 3; // 列占三个单元格 52 weightx = 1.0; // 当窗口放大时,长度随之放大 53 weighty = 1.0; // 当窗口放大时,高度随之放大 54 anchor = GridBagConstraints.NORTH; // 当组件没有空间大时,使组件处在北部 55 fill = GridBagConstraints.BOTH; // 当有剩余空间时,填充空间 56 insert = new Insets(0, 0, 0, 10); // 组件彼此的间距 57 ipadx = 0; // 组件内部填充空间,即给组件的最小宽度添加多大的空间 58 ipady = 0; // 组件内部填充空间,即给组件的最小高度添加多大的空间 59 gridbagconstraints = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 60 weightx, weighty, anchor, fill, insert, ipadx, ipady); 61 grigbag.setConstraints(b_1, gridbagconstraints); 62 pane.add(b_1); 63 64 /** 65 * 下面每个单元格的设置中都有很多设置是前面已经设好的,不必要重新附值,这么写是为了更容易的看懂每个单元格中的设置。 66 */ 67 68 gridx = 1; // X1 69 gridy = 0; // Y0 70 gridwidth = 1; // 横占一个单元格 71 gridheight = 2; // 列占两个单元格 72 weightx = 1.0; // 当窗口放大时,长度随之放大 73 weighty = 1.0; // 当窗口放大时,高度随之放大 74 anchor = GridBagConstraints.NORTH; // 当组件没有空间大时,使组件处在北部 75 fill = GridBagConstraints.BOTH; // 当格子有剩余空间时,填充空间 76 insert = new Insets(0, 0, 0, 10); // 组件彼此的间距 77 ipadx = 0; // 组件内部填充空间,即给组件的最小宽度添加多大的空间 78 ipady = 0; // 组件内部填充空间,即给组件的最小高度添加多大的空间 79 gridbagconstraints = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 80 weightx, weighty, anchor, fill, insert, ipadx, ipady); 81 grigbag.setConstraints(b_2, gridbagconstraints); 82 pane.add(b_2); 83 84 // 下面是一个临时的填充面板,否则格子有可能会被挤掉 85 gridx = 1; // X1 86 gridy = 2; // Y2 87 gridwidth = 1; // 横占一个单元格 88 gridheight = 1; // 列占一个单元格 89 weightx = 0.0; // 当窗口放大时,长度不变 90 weighty = 0.0; // 当窗口放大时,高度不变 91 anchor = GridBagConstraints.NORTH; // 当组件没有空间大时,使组件处在北部 92 fill = GridBagConstraints.BOTH; // 当格子有剩余空间时,填充空间 93 insert = new Insets(0, 0, 0, 0); // 组件彼此的间距 94 ipadx = 0; // 组件内部填充空间,即给组件的最小宽度添加多大的空间 95 ipady = 0; // 组件内部填充空间,即给组件的最小高度添加多大的空间 96 gridbagconstraints = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 97 weightx, weighty, anchor, fill, insert, ipadx, ipady); 98 JPanel tempPane = new JPanel(); 99 grigbag.setConstraints(tempPane, gridbagconstraints); 100 pane.add(tempPane); 101 102 // 又是一个临时的填充面板 103 gridx = 2; // X2 104 gridy = 0; // Y0 105 gridwidth = 1; // 横占一个单元格 106 gridheight = 1; // 列占一个单元格 107 weightx = 0.0; // 当窗口放大时,长度不变 108 weighty = 0.0; // 当窗口放大时,高度不变 109 anchor = GridBagConstraints.NORTH; // 当组件没有空间大时,使组件处在北部 110 fill = GridBagConstraints.BOTH; // 当格子有剩余空间时,填充空间 111 insert = new Insets(0, 0, 0, 0); // 组件彼此的间距 112 ipadx = 0; // 组件内部填充空间,即给组件的最小宽度添加多大的空间 113 ipady = 0; // 组件内部填充空间,即给组件的最小高度添加多大的空间 114 gridbagconstraints = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 115 weightx, weighty, anchor, fill, insert, ipadx, ipady); 116 tempPane = new JPanel(); 117 grigbag.setConstraints(tempPane, gridbagconstraints); 118 pane.add(tempPane); 119 120 gridx = 2; // X2 121 gridy = 1; // Y1 122 gridwidth = 1; // 长度为1 123 gridheight = 1; // 高度为1 124 weightx = 1.0; // 当窗口放大时,长度随之放大 125 weighty = 0.0; // 当窗口放大时,高度不变 126 anchor = GridBagConstraints.SOUTH; // 当组件没有空间大时,使组件处于底部 127 fill = GridBagConstraints.HORIZONTAL; // 当有剩余空间时,横向填充空间 128 insert = new Insets(0, 0, 0, 0); // 组件彼此的间距 129 ipadx = 0; // 组件内部填充空间,即给组件的最小宽度添加多大的空间 130 ipady = 0; // 组件内部填充空间,即给组件的最小高度添加多大的空间 131 gridbagconstraints = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 132 weightx, weighty, anchor, fill, insert, ipadx, ipady); 133 grigbag.setConstraints(b_3, gridbagconstraints); 134 pane.add(b_3); 135 136 // 又是一个临时的填充面板 137 gridx = 3; // X3 138 gridy = 0; // Y0 139 gridwidth = 1; // 横占一个单元格 140 gridheight = 2; // 列占两个单元格 141 weightx = 0.0; // 当窗口放大时,长度不变 142 weighty = 0.0; // 当窗口放大时,高度不变 143 anchor = GridBagConstraints.NORTH; // 当组件没有空间大时,使组件处在北部 144 fill = GridBagConstraints.BOTH; // 当格子有剩余空间时,填充空间 145 insert = new Insets(0, 0, 0, 0); // 组件彼此的间距 146 ipadx = 0; // 组件内部填充空间,即给组件的最小宽度添加多大的空间 147 ipady = 0; // 组件内部填充空间,即给组件的最小高度添加多大的空间 148 gridbagconstraints = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 149 weightx, weighty, anchor, fill, insert, ipadx, ipady); 150 tempPane = new JPanel(); 151 grigbag.setConstraints(tempPane, gridbagconstraints); 152 pane.add(tempPane); 153 154 gridx = 3; // X3 155 gridy = 2; // Y2 156 gridwidth = 1; // 长度为1 157 gridheight = 2; // 高度为2 158 weightx = 0.0; // 当窗口放大时,长度没有变化 159 weighty = 1.0; // 当窗口放大时,高度随之放大 160 anchor = GridBagConstraints.NORTH; // 当组件没有空间大时,使组件处于顶部 161 fill = GridBagConstraints.VERTICAL; // 当有剩余空间时,纵向填充空间 162 insert = new Insets(0, 0, 0, 0); // 组件彼此的间距 163 ipadx = 0; // 组件内部填充空间,即给组件的最小宽度添加多大的空间 164 ipady = 0; // 组件内部填充空间,即给组件的最小高度添加多大的空间 165 gridbagconstraints = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 166 weightx, weighty, anchor, fill, insert, ipadx, ipady); 167 grigbag.setConstraints(b_4, gridbagconstraints); 168 pane.add(b_4); 169 170 gridx = 0; // X0 171 gridy = 3; // Y3 172 gridwidth = 2; // 长度为2 173 gridheight = 1; // 高度为1 174 weightx = 1.0; // 当窗口放大时,长度随之放大 175 weighty = 0.0; // 当窗口放大时,高度没有变化 176 anchor = GridBagConstraints.SOUTH; // 当组件没有空间大时,使组件处于底部 177 fill = GridBagConstraints.HORIZONTAL; // 当有剩余空间时,横向填充空间 178 insert = new Insets(0, 0, 0, 0); // 组件彼此的间距 179 ipadx = 0; // 组件内部填充空间,即给组件的最小宽度添加多大的空间 180 ipady = 0; // 组件内部填充空间,即给组件的最小高度添加多大的空间 181 gridbagconstraints = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 182 weightx, weighty, anchor, fill, insert, ipadx, ipady); 183 grigbag.setConstraints(b_5, gridbagconstraints); 184 pane.add(b_5); 185 186 this.getContentPane().add(pane); 187 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 188 this.setSize(450, 180); 189 this.setLocationRelativeTo(null); 190 this.setVisible(true); 191 } 192 193 public static void main(String args[]) { 194 new Test(); 195 } 196 197 }
浙公网安备 33010602011771号