GUI-布局管理器

1.概述

        组件在容器中的位置和尺寸是由布局管理器来决定的。所有的容器都会引用一个布局管理器实例,通过它来自动进行组件的布局管理。

2.分类

  java.awt包提供了5种布局管理器:

  • FlowLayout流式布局管理器;
  • BorderLayout边框布局管理器;
  • GridLayout网格布局管理器;
  • CardLayout卡片布局管理器;
  • GridBagLayout网格包布局管理器;

javax.swing包提供了一种BoxLayout盒式布局管理器

3.使用

  • FlowLayout流式布局管理器

        最简单的布局管理器,按照组件的添加次序将它们从左到右地放置在容器中。当到达容器边界时,组件将放置在下一行中。 FlowLayout允许以左对齐、居中对齐(默认方式)或右对齐的方式排列组件。

package com.demo;

import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class FlowLayoutTest {
	public static void main(String[] args) {
		//1.创建容器
		JFrame jFrame = new JFrame("流式");
		//2.创建面板
		JPanel jPanel = new JPanel();
		//3.创建组件
		JButton btn = new JButton("btn1");
		JButton btn2 = new JButton("btn2");
		JButton btn3 = new JButton("btn3");
		//4.设置布局管理器
		jPanel.setLayout(new FlowLayout());
		//5.将组件添加到面板中
		jPanel.add(btn3);
		jPanel.add(btn2);
		jPanel.add(btn);
		//6.将面板添加到容器中
		jFrame.add(jPanel);
		//7.设置容器大小
		jFrame.setSize(400,500);
		//8.设置容器可见性
		jFrame.setVisible(true);
                //9.关闭窗口
		jFrame.setDefaultCloseOperation(3);
	}
}

 

  • BorderLayout边界布局管理器

            将容器分为五个区域:东、南、西、北和中。对于采用BorderLayout的容器,当它用add()方法添加一个组件时,可以同时为组件指定在容器中的区域。

    void add(Component comp, Object constraints)

    这里的constraints是String类型,可选值为BorderLayout提供的五个常量:

    • BorderLayout.NORTH: 北区域,值为"North";

    • BorderLayout.SOUTH: 南区域,值为"South";

    • BorderLayout.EAST: 东区域,值为"East";

    • BorderLayout.WEST: 西区域,值为"West";

    • BorderLayout.CENTER: 中区域,值为"Center";

package com.demo;

import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class BorderLayoutTest {
	public static void main(String[] args) {
		//1.创建容器
		JFrame jFrame = new JFrame("边界");
		//2.创建面板
		JPanel jPanel = new JPanel();
		//3.创建组件
		JButton btn = new JButton("btn");
		JButton btn2 = new JButton("btn2");
		JButton btn3 = new JButton("btn3");
		JButton btn4 = new JButton("btn4");
		JButton btn5 = new JButton("btn5");
		//4.设置布局管理器
		jPanel.setLayout(new BorderLayout());
		//5.添加组件到面板
		jPanel.add(btn, BorderLayout.CENTER);
		jPanel.add(btn2, BorderLayout.NORTH);
		jPanel.add(btn3, BorderLayout.SOUTH);
		jPanel.add(btn4, BorderLayout.WEST);
		jPanel.add(btn5, BorderLayout.EAST);
		//6.添加面板到容器
		jFrame.add(jPanel);
		//7.设置容器大小
		jFrame.setSize(400, 500);
		//8.设置可见性
		jFrame.setVisible(true);
                //9.关闭窗口
		jFrame.setDefaultCloseOperation(3);
	}
}

 

  • GridLayout网格布局管理器

        GridLayout将容器分割成许多行和列,组件被填充到每个网格中。添加到容器中的组件首先放置在左上角的网格中,然后从左到右放置其他组件,直至占满该行的所有网络,接着继续在下一行中从左到右放置组件。

package com.demo;

import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class GridLayoutTest {
	public static void main(String[] args) {
		//1.创建容器
		JFrame jFrame = new JFrame("网格");
		//2.创建面板
		JPanel jPanel = new JPanel();
		//3.设置布局管理器
		jPanel.setLayout(new GridLayout(2,2));
		//4.创建组件
		JButton btn = new JButton("btn");
		JButton btn2 = new JButton("btn2");
		JButton btn3 = new JButton("btn3");
		JButton btn4 = new JButton("btn4");
		//5.添加组件到面板
		jPanel.add(btn);
		jPanel.add(btn2);
		jPanel.add(btn3);
		jPanel.add(btn4);
		//6.添加面板到容器
		jFrame.add(jPanel);
		//7.设置容器大小
		jFrame.setSize(400, 400);
		//8.设置容器可见性
		jFrame.setVisible(true);
                //9.关闭窗口
		jFrame.setDefaultCloseOperation(3);
	}
}

 

  • CardLayout卡片布局管理器

        将界面看做一系列的卡片,在任何时侯只有其中一张卡片是可见的,这张卡片占据容器的整个区域。

package com.demo;

import java.awt.Button;
import java.awt.CardLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class CardLayoutTest {
	public static void main(String[] args) {
		//1.创建容器
		JFrame jFrame = new JFrame("卡片");
		//2.创建面板
		JPanel jPanel = new JPanel();
		//3.设置布局管理器
		jPanel.setLayout(new CardLayout());
		//4.创建组件
		Button btn = new Button("b");
		Button btn2 = new Button("bt");
		Button btn3 = new Button("btn");
		//5.添加组件到面板
		jPanel.add(btn);
		jPanel.add(btn2);
		jPanel.add(btn3);
		//6.添加面板到容器
		jFrame.add(jPanel);
		//7.设置容器大小
		jFrame.setSize(400,400);
		//8.设置容器可见性
		jFrame.setVisible(true);
                //9.关闭窗口
		jFrame.setDefaultCloseOperation(3);
	}
}

 

  • GridBagLayout网格包布局管理器

        在网格的基础上提供更为复杂的布局。和GridLayout不同, GridBagLayout允许容器中各个组件的大小各不相同,还允许单个组件所在的显示区域占据多个网格。

package com.demo;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class GridBagLayoutTest {
	public static void main(String[] args) {
		// 1.创建容器
		JFrame jFrame = new JFrame("网格包");
		// 2.创建面板
		JPanel jPanel = new JPanel();
		// 3.设置布局管理器
		GridBagLayout gridBagLayout = new GridBagLayout();
		jPanel.setLayout(gridBagLayout);
		// 4.创建GridBagConstraints对象
		GridBagConstraints constraints = new GridBagConstraints();
		// 设置网格的左上角的x坐标
		constraints.gridx = 1;
		// 设置网格的左上角的y坐标
		constraints.gridy = 1;
		// 设置网格的宽度
		constraints.gridwidth = 1;
		// 设置网格的高度
		constraints.gridheight = 1;
		// 5.创建组件
		JButton btn = new JButton("btn");
		gridBagLayout.setConstraints(btn, constraints);
		// 6.添加组件到面板
		jPanel.add(btn);
		constraints.gridx = 2;
		constraints.gridy = 1;
		constraints.gridwidth = 1;
		constraints.gridheight = 1;
		JButton btn2 = new JButton("btn2");
		gridBagLayout.setConstraints(btn2, constraints);
		jPanel.add(btn2);
		JButton btn3 = new JButton("btn3");
		constraints.gridx = 1;
		constraints.gridy = 2;
		constraints.gridwidth = 2;
		constraints.gridheight = 1;
		constraints.fill = GridBagConstraints.BOTH;
		gridBagLayout.setConstraints(btn3, constraints);
		jPanel.add(btn3);
		// 7.添加面板到容器
		jFrame.add(jPanel);
		// 8.设置容器大小
		jFrame.setSize(400, 400);
		// 9.设置容器可见性
		jFrame.setVisible(true);
                //10.关闭窗口
		jFrame.setDefaultCloseOperation(3);
	}
}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值