java布局管理器

java布局管理器

1、FlowLayout

流式布局管理器是最简单的布局管理器,在这种布局下,容器会将组件按照添加顺序从左向右放置。当到达容器的边界时,会自动将组件放到下一行的开始位置。这些组件可以左对齐、居中对齐(默认方式)或右对齐的方式排列。具体可以通过javaAPI查看.

下面我来用案例来演示一下

package cn.itcast.chapter08.example02;
import java.awt.*;
public class Example02 {
	public static void main(String[] args) {
		final Frame f = new Frame("Flowlayout");// 创建一个名为Flowlayout的窗体
		// 设置窗体中的布局管理器为FlowLayout,所有组件左对齐,水平间距为20,垂直间距为30
		f.setLayout(new FlowLayout(FlowLayout.LEFT, 20, 30));
		f.setSize(220, 300); // 设置窗体大小
		f.setLocation(300, 200); // 设置窗体显示的位置
		f.add(new Button("第1个按钮")); // 把"第1个按钮"添加到f窗口
		f.add(new Button("第2个按钮"));
		f.add(new Button("第3个按钮"));
		f.add(new Button("第4个按钮"));
		f.add(new Button("第5个按钮"));
		f.add(new Button("第6个按钮"));
		f.setVisible(true); // 设置窗体可见
	}
}

2、BorderLayout

边界布局管理器是一种较为复杂的布局方式,它将容器划分为五个区域,分别是东(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER),组件可以直接被放置在这5个区域中的任意一个。

接下来通过一个案例来演示一下

package cn.itcast.chapter08.example03;
import java.awt.*;
public class Example03 {
	public static void main(String[] args) {
		final Frame f = new Frame("BorderLayout");// 创建一个名为BorderLayout的窗体
		f.setLayout(new BorderLayout()); // 设置窗体中的布局管理器为BorderLayout
		f.setSize(300, 300); // 设置窗体大小
		f.setLocation(300, 200);// 设置窗体显示的位置
		f.setVisible(true); // 设置窗体可见
		// 下面的代码是创建5个按钮,分别用于填充BorderLayout的5个区域
		Button but1 = new Button("东部"); // 创建新按钮
		Button but2 = new Button("西部");
		Button but3 = new Button("南部");
		Button but4 = new Button("北部");
		Button but5 = new Button("中部");
		// 下面的代码是将创建好的按钮添加到窗体中,并设置按钮所在的区域
		f.add(but1, BorderLayout.EAST); // 设置按钮所在区域
		f.add(but2, BorderLayout.WEST);
		f.add(but3, BorderLayout.SOUTH);
		f.add(but4, BorderLayout.NORTH);
		f.add(but5, BorderLayout.CENTER);
	}
}

3、GridLayout

网格布局管理器使用纵横线将容器分成n行m列大小相等的网络,每个网格中放置一个组件。

与FloeLayout不同的是,放置在GridLayout布局管理器中的组件将自动占据网格的整个区域。

案例演示:

package cn.itcast.chapter08.example04;
import java.awt.*;
public class Example04 {
	public static void main(String[] args) {
		Frame f = new Frame("GridLayout");// 创建一个名为GridLayout的窗体
		f.setLayout(new GridLayout(3, 3));// 设置该窗体为3*3的网格
		f.setSize(300, 300); // 设置窗体大小
		f.setLocation(400, 300);
		// 下面的代码是循环添加9个按钮到GridLayout中
		for (int i = 1; i <= 9; i++) {
			Button btn = new Button("btn" + i);
			f.add(btn); // 向窗体中添加按钮
		}
		f.setVisible(true);
	}
}


4、GridBagLayout

网格包布局管理器是最灵活、最复杂的布局管理器。与GridLayout布局管理器类似,不同的是,它允许网格中的组件大小各不相同,而且允许一个组件跨越一个或者多个网格。

案例演示:

package cn.itcast.chapter08.example05;
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("btn1", layout, c);
		this.addComponent("btn2", layout, c);
		this.addComponent("btn3", layout, c);
		c.gridwidth = GridBagConstraints.REMAINDER; // 添加的组件是本行最后一个组件
		this.addComponent("btn4", layout, c);
		c.weightx = 0; // 设置横向权重为0
		c.weighty = 0; // 设置纵向权重为0
		addComponent("btn5", layout, c);
		c.gridwidth = 1; // 设置组件跨一个网格(默认值)
		this.addComponent("btn6", layout, c);
		c.gridwidth = GridBagConstraints.REMAINDER; // 添加的组件是本行最后一个组件
		this.addComponent("btn7", layout, c);
		c.gridheight = 2; // 设置组件纵向跨两个网格
		c.gridwidth = 1; // 设置组件横向跨一个网格
		c.weightx = 2; // 设置横向权重为2
		c.weighty = 2; // 设置纵向权重为2
		this.addComponent("btn8", layout, c);
		c.gridwidth = GridBagConstraints.REMAINDER;
		c.gridheight = 1;
		this.addComponent("btn9", layout, c);
		this.addComponent("btn10", layout, c);
		this.setTitle(title);
		this.pack();
		this.setVisible(true);
	}
	// 增加组件的方法
	private void addComponent(String name, GridBagLayout layout,
			GridBagConstraints c) {
		Button bt = new Button(name); // 创建一个名为name的按钮
		layout.setConstraints(bt, c); // 设置GridBagConstraints对象和按钮的关联
		this.add(bt); // 增加按钮
	}
}
public class Example05 {
	public static void main(String[] args) {
		new Layout("GridBagLayout");
	}
}

5、CardLayout

在操作程序中,经常会遇到通过选项卡按钮来切换程序中的界面,这些界面就相当于一张张卡片,而管理这些卡片的布局管理器。卡片布局管理器将界面看做是一系列卡片,在任何时候只有其中一张卡片是可见的,这张卡片占据容器的整个区域。

package cn.itcast.chapter08.example06;
import java.awt.*;
import java.awt.event.*;
//定义Cardlayout继承Frame类,实现ActionListener接口
class Cardlayout extends Frame implements ActionListener {
	Panel cardPanel = new Panel(); // 定义Panel面板放置卡片
	Panel controlpaPanel = new Panel(); // 定义Panel面板放置按钮
	Button nextbutton, preButton;       //声明两个按钮
	CardLayout cardLayout = new CardLayout();// 定义卡片布局对象
	// 定义构造方法,设置卡片布局管理器的属性
	public Cardlayout() { 
		setSize(300, 200);
		setVisible(true);
		// 为窗口添加关闭事件监听器
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				Cardlayout.this.dispose();
			}
		});
		cardPanel.setLayout(cardLayout); // 设置cardPanel面板对象为卡片布局
		// 在cardPanel面板对象中添加3个文本标签
		cardPanel.add(new Label("第一个界面", Label.CENTER));
		cardPanel.add(new Label("第二个界面", Label.CENTER));
		cardPanel.add(new Label("第三个界面", Label.CENTER));
		// 创建两个按钮对象
		nextbutton = new Button("下一张卡片");
		preButton = new Button("上一张卡片");
		// 为按钮对象注册监听器
		nextbutton.addActionListener(this);
		preButton.addActionListener(this);
		// 将按钮添加到controlpaPanel中
		controlpaPanel.add(preButton);
		controlpaPanel.add(nextbutton);
		// 将cardPanel面板放置在窗口边界布局的中间,窗口默认为边界布局
		this.add(cardPanel, BorderLayout.CENTER);
		// 将controlpaPanel面板放置在窗口边界布局的南区,
		this.add(controlpaPanel, BorderLayout.SOUTH);
	}
	// 下面的代码实现了按钮的监听触发,并对触发事件做出相应的处理
	public void actionPerformed(ActionEvent e) {
		// 如果用户单击nextbutton,执行的语句
		if (e.getSource() == nextbutton) {
			// 切换cardPanel面板中当前组件之后的一个组件,若当前组件为最后一个组件,则显示第一个组件。
			cardLayout.next(cardPanel);
		}
		if (e.getSource() == preButton) {
			// 切换cardPanel面板中当前组件之前的一个组件,若当前组件为第一个组件,则显示最后一个组件。
			cardLayout.previous(cardPanel);
		}
	}
}
public class Example06 {
	public static void main(String[] args) {
		Cardlayout cardlayout = new Cardlayout();
	}
}

6、不使用布局管理器

当一个容器被创建后,它们都会有一个默认的布局管理器。Window、Frame和Dialog的默认布局管理器是BorderLayout,Panel的默认布局管理器是FlowLayout。如果不希望通过布局管理器来对容器进行布局,也可以调用容器的setLayout(null)方法,将布局管理器取消。在这种情况下,程序必须调用容器中每个组件的setSize()和setLocation()方法或者是setBounds()方法(这个方法接受四个参数,分别是左上角的x、y坐标和组件的长、宽)来为这些组件在容器中定位。

详情请看代码演示

package cn.itcast.chapter08.example07;
import java.awt.*;
public class Example07 {
	public static void main(String[] args) {
		Frame f = new Frame("hello");
		f.setLayout(null); // 取消 frame的布局管理器
		f.setSize(300, 150);
		Button btn1 = new Button("press");
		Button btn2 = new Button("pop");
		btn1.setBounds(40, 60, 100, 30);
		btn2.setBounds(140, 90, 100, 30);
		// 在窗口中添加按钮
		f.add(btn1);
		f.add(btn2);
		f.setVisible(true);
	}
}


上面描述就布局管理器的几种类型,并附上了详细的代码
其中具体的方法没有介绍,详细信息JavaAPI可以进行查找


愿您看完能够理解
生活更美好

不小心敲到了23:28






猜你喜欢

转载自blog.csdn.net/sdwujk160507140150/article/details/78660083
今日推荐