什么是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。
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP