Java 图形用户界面(GUI)布局管理器

组件不能单独存在,必须放置于容器中,组件在容器中的位置和尺寸是由布局管理器来决定的

  1. FlowLayout(流式布局管理器)
  2. BoderLayout(边界布局管理器)
  3. GridLayout(网格布局管理器)
  4. GridBagLayout(网格包布局管理器)
  5. CardLayout(卡片布局管理器)

1.FlowLayout

容器会将组件按照添加顺序,从左到右放置,到达边界时,自动换行

import java.awt.*;

public class Example {
	public static void main(String[] args) {
		//创建一个窗体
		final Frame f=new Frame("Flowlayout");
		//设置布局管理器为FlowLayout,所有组件左对齐,水平间距20,垂直间距30
		f.setLayout(new FlowLayout(FlowLayout.LEFT,20,30));
		f.setSize(520,400);//设置窗体大小
		f.setLocation(200, 300);
		
		for(int i=1;i<30;i++)
		f.add(new Button("Button"+i));
		f.setVisible(true);
	}
}

2.BorderLayout

将容器划分为5个区域,分别是【东】EAST,【南】SOUTH,【西】WEST,【北】NORTH,【中】CENTER;

如果不指定添加区域,默认放到CENTER区,每个区域只能放置一个组件

import java.awt.*;

public class Example {
	public static void main(String[] args) {
		//创建一个窗体
		Frame f=new Frame("BorderLayout");
		
		//设置布局管理器为BorderLayout
		f.setLayout(new BorderLayout());
		
		f.setSize(520,400);//设置窗体大小
		f.setLocation(200, 300);//显示位置
		f.setVisible(true);//设置可见
		
		Button[] but=new Button[6];
		//创建5个按钮,分别填充在borderLayout的5个区域
		Button but1 =new Button("EAST");
		Button but2 =new Button("SOUTH");
		Button but3 =new Button("WEST");
		Button but4 =new Button("NORTH");
		Button but5 =new Button("CENTER");
		
		f.add(but1,BorderLayout.EAST);
		f.add(but2,BorderLayout.SOUTH);
		f.add(but3,BorderLayout.WEST);
		f.add(but4,BorderLayout.NORTH);
		f.add(but5,BorderLayout.CENTER);
		
		f.add(new Button("每个区域只能放置一个组件"), BorderLayout.CENTER);
	}
}

3.GridLayout

将容器分为N行M列的网格,从左到右每个网格放一个组件,所有组件宽高相同

import java.awt.*;

public class Example {
	public static void main(String[] args) {
		//创建一个窗体
		Frame f=new Frame("GridLayout");
		
		//设置布局管理器为BorderLayout
		f.setLayout(new GridLayout(3,5,10,30));//设置网格:行为3,列为5,,水平间距10,垂直间距30
		
		f.setSize(500,300);
		f.setLocation(400, 300);
		f.setVisible(true);
		
		for(int i=0;i<15;i++) {
			f.add(new Button("Button"+i));
		}
	}
}

4.Grid BagLayout

最灵活、最复杂的布局管理器,允许组件大小自定义,允许一个组件跨越一个或多个网格

import java.awt.*;
class Layout extends Frame{
	public Layout(String title) {
		GridBagLayout layout =new GridBagLayout();
		GridBagConstraints c=new GridBagConstraints();//布局约束条件
		this.setLayout(layout);
		c.fill=GridBagConstraints.BOTH;//设置组件横向纵向可以拉伸
		c.weightx=1;//设置横向权重为1
		c.weighty=1;//设置纵向权重为1
		
		this.addComponent("button1", layout, c);
		this.addComponent("button2", layout, c);
		this.addComponent("button3", layout, c);
		
		//添加的组件是本行最后一个组件
		c.gridwidth=GridBagConstraints.REMAINDER;
		this.addComponent("button4", layout, c);
		
		c.weightx=0;
		c.weighty=0;
		this.addComponent("button5", layout, c);
		c.gridwidth=1;//设置组件跨一个网格
		
		this.addComponent("button6", layout, c);
		
		//添加的组件是本行最后一个组件
		c.gridwidth=GridBagConstraints.REMAINDER;
		this.addComponent("button7", layout, c);
		
		c.gridheight=2;
		c.gridwidth=1;
		c.weightx=2;
		c.weighty=2;
		
		this.addComponent("button8", layout, c);
		c.gridwidth=GridBagConstraints.REMAINDER;
		c.gridwidth=1;//设置组件跨一个网格
		this.addComponent("button9", layout, c);
		this.addComponent("button10", layout, c);
		
		this.setTitle(title);
		this.pack();
		this.setVisible(true);
	}
	//增加组件的方法
	private void addComponent(String name,GridBagLayout layout,GridBagConstraints c) {
		Button bt=new Button(name);
		layout.setConstraints(bt, c);//设置约束条件c和按钮关联
		this.add(bt);//增加按钮
	}
}
public class Example {
	public static void main(String[] args) {
		new Layout("GridBagLayout");
	}
}

5.Card Layout

在操作程序中,经常会遇到通过选项卡来切换程序中的界面,这些界面就像一张张卡片;可以使多个界面共享一个显示空间,某一时刻只有一个界面可见

6.不使用布局管理器

import java.awt.*;

public class Example {
	public static void main(String[] args) {
		Frame f=new Frame("Frame without Layout");
		f.setLayout(null);//取消frame的布局管理器
		f.setSize(300,150);
		f.setVisible(true);
		
		Button button1=new Button("press");
		Button button2=new Button("pop");
		button1.setBounds(40,60,100,30);//左上角的X和Y坐标、组件的长和宽
		button2.setBounds(150,90,110,30);
		f.add(button1);
		f.add(button2);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40507857/article/details/83956940