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