GUI之布局管理器(一)

在图形用户界面设计(GUI)过程中,我们经常会用到布局管理器,那么常用的布局管理器有哪些呢?它们又具有什么特征呢?

一、FlowLayout(流式布局)

1、特点:

     a、流式布局会将组件按照顺序从左到右添加;

     b、当一行排满后会自动换行。

2、构造方法:

     FlowLayout( );

     FlowLayout( int  aligh );

     FlowLayOut(int aligh,int hgap,int vgap);

其中,参数aligh决定组件在容器中的对其方式,可选的值为:

    CENTER:居中对齐(默认方式);

    LEFT:左对齐;

    RIGHT:右对齐;

    LEADING:与容器方向的开始边对齐;

    TRAILING:与容器方向的结束边对齐;

参数hgap和vgap分别设定组件之间的水平和垂直间隙,默认值为5。

3、示例:

代码说明:流式布局,设置TRAILING对齐方式,每隔2秒添加一个按钮:

package com.Liao.SwingTest0820;

import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Flowlayout extends JFrame {

	private static final long serialVersionUID = -4193345082031158245L;

	public static void main(String[] args) {
		new Flowlayout().init();
	}
	
	private void init() {
		setSize(300, 200);
		setDefaultCloseOperation(3);
		setLocationRelativeTo(null);
		//与容器结束边对齐,垂直和水平间隔20像素
		setLayout(new FlowLayout(FlowLayout.TRAILING,20,20));
		//调用添加按钮方法
		addButton();
	}
	//添加按钮方法
	private void addButton() {
		for(int i=1;i<9;i++) {
			try {
				//每隔两秒添加一个按钮
				Thread.sleep(2000);
				JButton jbu=new JButton("按钮"+i);
				add(jbu);
				setVisible(true);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

4、效果图:

二、BorderLayout(边界布局)

1、特点:

   a、边界布局将容器划分为五个区域,分别为东(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER);

   b、容器大小调整时,边界布局NORTH和SOUTH区域高度不变长度跟随变化,EAST和WEST长度不变高度跟随变化;

   c、容器添加组件时,需调用add(Component comp,Object constraints)方法,constraints可选值为BorderLayout类的五个常数:EAST、WEST、SOUTH、NORTH、CENTER;

2、构造方法:

    BorderLayout( );

    BorderLayout(int hgap ,int vgap);

参数hgap和vgap分别设定组件之间的水平和垂直间隙,默认值为5像素。

3、示例:

package com.Liao.SwingTest0820;

import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Borderlayout extends JFrame {

	private static final long serialVersionUID = -4193345082031158245L;

	public static void main(String[] args) {
		new Borderlayout().init();
	}

	private void init() {
		setSize(300, 300);
		setDefaultCloseOperation(3);
		setLocationRelativeTo(null);
		// 设置边界布局
		setLayout(new BorderLayout());
		// 添加按钮
		add(new JButton("东"),BorderLayout.EAST);
		add(new JButton("西"),BorderLayout.WEST);
		add(new JButton("南"),BorderLayout.SOUTH);
		add(new JButton("北"),BorderLayout.NORTH);
		add(new JButton("中"),BorderLayout.CENTER);
		setVisible(true);
	}
}

4、效果图:

三、CardLayout(卡片布局)

1、特点:

    a、卡片布局管理器将容器中的每个组件看作一张卡片,任何时候一次只能看到一张卡片,这张卡片占据整个容器;

    b、卡片的顺序由组件对象本身在容器内部的顺序决定;

   c、通过调用previous(Container parent),next(Container parent),show(Container parent,String name)方法来切换卡片。其中name参数可通过调用add(Component comp,Object constraints)方法来设定。

2、构造方法:

   CardLayout( );

   CardLayout(int hgap ,int vgap);

参数hgap和vgap分别设定组件之间的水平和垂直间隙,默认值为5像素。

3、示例:

package com.Liao.SwingTest0820;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class CardLayoutTest extends JFrame implements ActionListener {

	private static final long serialVersionUID = 6552368201238403917L;
	private JButton jbu_next, jbu_pre,jbu_num;// 切换按钮
	private JTextField jtf;
	private CardLayout cl = new CardLayout();
	private JPanel p = new JPanel();

	public static void main(String[] args) {
		new CardLayoutTest().init();
	}

	public void init() {
		setSize(300, 200);
		setDefaultCloseOperation(3);
		setLocationRelativeTo(null);
		// 卡片切换容器
		JPanel cp = new JPanel();
		add(cp, BorderLayout.SOUTH);
		// 切换按钮
		jbu_pre = new JButton("上一页");
		jbu_pre.addActionListener(this);
		jbu_next = new JButton("下一页");
		jbu_next.addActionListener(this);
		jbu_num=new JButton("跳转");
		jbu_num.addActionListener(this);
		jtf=new JTextField(2);
		// 将按钮添加至容器中
		cp.add(jbu_pre);
		cp.add(jbu_next);
		cp.add(jbu_num);
		cp.add(jtf);
		// 将卡片容器添加至中间区域
		add(p, BorderLayout.CENTER);
		// 设置卡片容器布局方式为卡片布局
		p.setLayout(cl);
		p.add(new JLabel("第一张卡片", JLabel.CENTER),"1");
		p.add(new JLabel("第二张卡片", JLabel.CENTER),"2");
		p.add(new JLabel("第三张卡片", JLabel.CENTER),"3");
		setVisible(true);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		String str = e.getActionCommand();
		if (str.equals("上一页")) {
			cl.previous(p);
		}
		if (str.equals("下一页")) {
			cl.next(p);
		}
		if (str.equals("跳转")) {
			cl.show(p,jtf.getText());
		}
	}
}

4、效果图:

四、GridLayout(网格布局)

1、特点:

   a、网格布局将容器划分为n行m列大小相等的网格,一个网格只能放置一个组件,且各组件大小一样;

   b、通过构造方法设定行数和列数为非零值时,指定的列数将被忽略,列数通过指定的行数和布局中的组件总数来确定;

   c、网格布局添加组件的默认顺序为从左到右,从上到下;

2、构造方法:

     GridLayout( );

     GridLayout( int  rows ,int cols );

     GridLayOut(int  rows , int cols,int hgap , int vgap);

参数rows和cols分别指定网格布局的行数和列数,参数hgap和vgap分别设定组件之间的水平和垂直间隙;

3、示例:

package com.Liao.SwingTest0820;

import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Gridlayout extends JFrame {

	private static final long serialVersionUID = -4193345082031158245L;

	public static void main(String[] args) {
		new Gridlayout().init();
	}

	private void init() {
		setSize(300, 300);
		setDefaultCloseOperation(3);
		setLocationRelativeTo(null);
		// 设置网格布局
		setLayout(new GridLayout(3,2));
		// 添加按钮
		addButton();
		setVisible(true);
	}
	private void addButton() {
		for(int i=1;i<9;i++) {
			try {
				//每隔两秒添加一个按钮
				Thread.sleep(2000);
				JButton jbu=new JButton("按钮"+i);
				add(jbu);
				setVisible(true);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

4、效果图:

好了,本篇就先介绍这四种布局管理器,下篇再做补充。

猜你喜欢

转载自blog.csdn.net/LIAO_7053/article/details/82118703