Java中的GridLayout和GridBagLayout有什么区别?

What are the differences between GridLayout and GridBagLayout in Java?

GridLayout将所有组件放置在一个矩形网格中,并分成相等大小的矩形,每个组件都放置在一个矩形内,而GridBagLayout是一种可灵活布局的管理器,它可以在不使组件大小相同的情况下垂直和水平对齐组件。每个GridBagLayout对象维护一个动态的矩形单元格网格,每个组件占据一个或多个称为Componentdisplayarea的单元格。

网格布局

AGridLayout将组件排列在矩形网格中。它在单元中排列组件,每个单元具有相同的大小。组件放置在列和行中。 GridLayout(int行,int列)采用两个参数,分别是列和行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.awt.*;
import javax.swing.*;
public class GridLayoutTest{
 GridLayoutTest() {
   JFrame frame = new JFrame("GridLayout Test");
   JButton button1, button2, button3, button4;
   button1 = new JButton("Button 1");
   button2 = new JButton("Button 2");
   button3 = new JButton("Button 3");
   button4 = new JButton("Button 4");
   frame.add(button1);
   frame.add(button2);
   frame.add(button3);
   frame.add(button4);
   frame.setLayout(new GridLayout(2,2));
   frame.setSize(300,300);
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.setVisible(true);
 }
 public static void main(String[] args) {
   new GridLayoutTest();
 }
}

输出量

GridBagLayout

AGridBagLayout扩展了GridLayout的功能。 GridBagLayout将组件放置在网格中的每个单个单元格中,并且还允许该组件跨越多个列或行。为了使用GridBagLayout,我们需要创建一个GridBagConstraints对象并填充适当的属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import javax.swing.*;
import java.awt.*;
public class GridBagLayoutTest extends JFrame {
 public GridBagLayoutTest() {
   setTitle("GridBagLayout Test");
   setLayout(new GridBagLayout());
   GridBagConstraints gbc = new GridBagConstraints();
   gbc.gridx = 5;
   gbc.gridy = 0;
   add(new JButton("Button1"), gbc);
   gbc.gridx = 0;
   gbc.gridy = 5;
   add(new JButton("Button2"), gbc);
   gbc.gridx = 2;
   gbc.gridy = 4;
   add(new JButton("Button3"), gbc);
 }
 public static void main(String[] args) {
   GridBagLayoutTest gbcTest = new GridBagLayoutTest();
   gbcTest.setSize(300,300);
   gbcTest.setVisible(true);
   gbcTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
}

输出量