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

awtjavaobject oriented programmingprogrammingswing

GridLayout 将所有组件放在一个矩形网格中,并被划分为 大小相等的矩形,每个组件都放置在一个矩形内,而 GridBagLayout 是一个灵活的布局管理器,可垂直和水平对齐组件,而无需组件具有相同的大小。每个 GridBagLayout  对象都维护一个动态的矩形单元格网格,每个组件占据一个或多个单元格,称为 Component display area

GridLayout

A GridLayout  将组件排列在矩形网格中。它将组件排列在单元格中,每个单元格具有相同的大小。组件放置在列和行中。GridLayout(int rows, int columns) 接受两个参数,即一列和一行。

示例

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

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

示例

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);
   }
}

输出


相关文章