什么是LayoutManager?Java中有哪些类型的LayoutManager?


布局管理器使我们能够通过确定容器内组件的大小和位置来控制在GUI窗体中视觉组件的排列方式。

LayoutManager的类型

Java中有6种布局管理器

  • FlowLayout:它像页面上的文字一样排列容器中的组件。它从左到右,从上到下填充顶行。组件按照添加顺序排列,即第一个组件出现在左上角。如果容器不够宽以显示所有组件,则会换行。可以控制组件之间的垂直和水平间距。组件可以左对齐、居中或右对齐
  • BorderLayout:它沿着容器的边缘或中间排列所有组件,即区域的顶部、底部、右侧和左侧边缘。添加到顶部或底部的组件获得其首选高度,但其宽度将是容器的宽度;添加到左侧或右侧的组件获得其首选宽度,但其高度将是容器的剩余高度。添加到中心的组件既没有其首选高度也没有其首选宽度。它覆盖容器的剩余区域。
  • GridLayout:它将所有组件排列在一个大小相等的单元格网格中,从左到右从上到下添加它们。一个单元格只能放置一个组件,并且网格的每个区域都将具有相同的大小。调整容器大小时,所有单元格都会自动调整大小。在单元格中放置组件的顺序与其添加顺序相同。
  • GridBagLayout:这是一个强大的布局,它将所有组件排列在一个单元格网格中,并在调整容器大小时保持对象的纵横比。在这个布局中,单元格的大小可能不同。它为组件分配一致的水平和垂直间距。它允许我们为列或行中的组件指定默认对齐方式。
  • BoxLayout:它可以垂直或水平排列多个组件,但不能同时进行这两种排列。组件从左到右或从上到下排列。如果组件水平对齐,则所有组件的高度将相同,且等于最大尺寸组件的高度。如果组件垂直对齐,则所有组件的宽度将相同,且等于最大宽度组件的宽度。
  • CardLayout:它排列两个或多个具有相同大小的组件。组件像纸牌一样排列,其中所有纸牌大小相同,并且任何时候都只有顶部的纸牌可见。添加到容器中的第一个组件将保留在牌堆的顶部。左右上下边缘的默认间距为零,纸牌组件水平或垂直显示。

示例

import java.awt.*;
import javax.swing.*;
public class LayoutManagerTest extends JFrame {
   JPanel flowLayoutPanel1, flowLayoutPanel2, gridLayoutPanel1, gridLayoutPanel2, gridLayoutPanel3;
   JButton one, two, three, four, five, six;
   JLabel bottom, lbl1, lbl2, lbl3;
   public LayoutManagerTest() {
      setTitle("LayoutManager Test");
      setLayout(new BorderLayout()); // Set BorderLayout for JFrame
      flowLayoutPanel1 = new JPanel();
      one = new JButton("One");
      two = new JButton("Two");
      three = new JButton("Three");
      flowLayoutPanel1.setLayout(new FlowLayout(FlowLayout.CENTER)); // Set FlowLayout Manager
      flowLayoutPanel1.add(one);
      flowLayoutPanel1.add(two);
      flowLayoutPanel1.add(three);
      flowLayoutPanel2 = new JPanel();
      bottom = new JLabel("This is South");
      flowLayoutPanel2.setLayout (new FlowLayout(FlowLayout.CENTER)); // Set FlowLayout Manager
      flowLayoutPanel2.add(bottom);
      gridLayoutPanel1 = new JPanel();
      gridLayoutPanel2 = new JPanel();
      gridLayoutPanel3 = new JPanel();
      lbl1 = new JLabel("One");
      lbl2 = new JLabel("Two");
      lbl3 = new JLabel("Three");
      four = new JButton("Four");
      five = new JButton("Five");
      six = new JButton("Six");
      gridLayoutPanel2.setLayout(new GridLayout(1, 3, 5, 5)); // Set GridLayout Manager
      gridLayoutPanel2.add(lbl1);
      gridLayoutPanel2.add(lbl2);
      gridLayoutPanel2.add(lbl3);
      gridLayoutPanel3.setLayout(new GridLayout(3, 1, 5, 5)); // Set GridLayout Manager
      gridLayoutPanel3.add(four);
      gridLayoutPanel3.add(five);
      gridLayoutPanel3.add(six);
      gridLayoutPanel1.setLayout(new GridLayout(2, 1)); // Set GridLayout Manager
      gridLayoutPanel1.add(gridLayoutPanel2);
      gridLayoutPanel1.add(gridLayoutPanel3);
      add(flowLayoutPanel1, BorderLayout.NORTH);
      add(flowLayoutPanel2, BorderLayout.SOUTH);
      add(gridLayoutPanel1, BorderLayout.CENTER);
      setSize(400, 325);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setLocationRelativeTo(null);
      setVisible(true);
   }
   public static void main(String args[]) {
      new LayoutManagerTest();
   }
}

输出

从我们的Java 教程开始学习Java。

更新于:2024年2月19日

浏览量:35K+

启动您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.