awt的BorderLayout布局1
布局管理器LayoutManager是一个接口 LayoutManager接口下有两个实现类分别是GridLayout、FlowLayout LayoutManager接口下有一个子接口是LayoutManager2 LayoutManager2接口下有三个实现类分别是CardLayout、GridBagLayout、BorderLayout
布局管理器LayoutManager共提供了5个实现类,即java的jdk共提供了5种布局管理器,如下
GridLayout:网格布局管理器 FlowLayout:流式布局管理器 CardLayout:卡片布局管理器 GridBagLayout:网格包布局管理器 BorderLayout:边框布局管理器
BorderLayout将容器分为EAST、SOUTH、WEST、NORTH、CENTER也就是右下左上中五个区域,普通组件可以被放置在这五个区域的任意一个里面
当改变使用BorderLayout的容器大小时,NORTH、SOUTH、CENTER区域水平调整,而EAST、WEST和CENTER区域数值调整
使用BorderLayout时有如下两个注意点: 1、当向使用BorderLayout布局管理器的容器中添加组件时,需要指定要添加到哪个容器中。如果没有指定添加到哪个区域中,则默认添加到中间区域 2、如果向一个区域中添加多个组件时,后放入的组件会覆盖先放入的组件
BorderLayout管理器是一个类,它的构造方法如下。注意hgap是垂直间距、vgap是水平间距
构造方法 | 作用 |
---|---|
BorderLayout() | 使用默认的水平间距、默认的垂直间距创建BorderLayout布局管理器 |
BorderLayout(int hgap,int vgap) | 使用指定的水平间距、指定的垂直间距创建BorderLayout布局管理器 |
awt的BorderLayout布局1_练习
xxxxxxxxxx
package ch29;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class a_3_2awt_BorderLayout布局 {
public static void main(String[] args) {
//创建窗口
Frame frame = new Frame("测试BorderLayout");
//1、给frame设置BorderLayout布局管理器
frame.setLayout(new BorderLayout(150,100));
//2、往frame的指定区域(如上下左右中)添加组件(如按钮)
frame.add(new Button("北部按钮"),BorderLayout.NORTH);
frame.add(new Button("南部按钮"),BorderLayout.SOUTH);
frame.add(new Button("东侧按钮"),BorderLayout.EAST);
frame.add(new Button("西侧按钮"),BorderLayout.WEST);
frame.add(new Button("中间按钮"),BorderLayout.CENTER);
//给Frame设置WindowListener监听器,监听用户点击右上角X的动作,则关闭窗口
frame.addWindowListener(new WindowAdapter() {
//采用Java通过的适配器设计模式,我们只需要重写自己需要的方法,例如windowClosing方法,如下
public void windowClosing(WindowEvent e) {
System.exit(0);//原理:退出JVM虚拟机,即退出当前运行的Java程序
}
});
//3、设置最佳大小,pack方法
frame.pack();
//设置窗口为可见
frame.setVisible(true);
//为什么按钮里面的文字出现乱码:idea编码是UTF-8,生成的按钮是由当前win11操作系统创建的,而当前系统的默认编码是中文GBK编码,不一致就会出现乱码
//解决:让编码和解码一致
//具体解决:在idea软件的上方中间靠右一些有一个绿色锤子图标,点击锤子图标右边的输入框,点击下拉的Edit Configurations...,点击弹出来的
//选项卡的Modify options绿色字体,找到Add VM options并勾选,将'-Dfile.encoding=gbk'输入到刚才Modify options蓝色字体的
//下方的三条输入框中的最上面那条输入框里面
}
}
awt的BorderLayout布局2
总结: 1、如果不往某个区域里面放置组件,那这个区域就会被别的区域的组件占用 2、在某个区域里放置组件时,如果不指定位置,那么该组件就会在该区域的中间位置 3、同一个区域如果放置多个组件,那么只有最后放置的那个组件才会生效 4、如何在同一个区域放置多个组件,且多个组件都生效。只需要把多个组件都放在Panel区域里面,再把Panel区域放在Frame区域里面即可
awt的BorderLayout布局2_练习
x
package ch29;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class a_3_3awt_BorderLayout布局2 {
public static void main(String[] args) {
Frame frame = new Frame("测试BorderLayout");
frame.setLayout(new BorderLayout(150,100));
//当我们没有添加西侧和东侧组件时,西侧和东侧的空间会空出来吗。结论:不会,被占用,北部按钮和南部按钮和中间按钮会向两边延伸
frame.add(new Button("北部按钮"),BorderLayout.NORTH);
frame.add(new Button("南部按钮"),BorderLayout.SOUTH);
//frame.add(new Button("中间按钮"),BorderLayout.CENTER);
//新增测试文本框
//frame.add(new TextField("测试文本框"));//我们不给这个文本框指定区域,按理说这个文本框会放在中间
//由于中间位置既被‘中间按钮’组件占用,又被'测试文本框'组件占用,那么中间区域会显示哪个组件呢
//结论:只能看到最后一个被添加的组件,既中间区域只能看到'测试文本框'组件
//如何在中间区域同时显示‘中间按钮’组件和'测试文本框'组件
//解决:把'中间按钮'组件和'测试文本框'组件一起放到Panel容器里面
//我们先把16行和18行先注释掉,再写如下代码
//创建一个Panel容器
Panel p = new Panel();//快捷生成左边:1、Alt+Enter;2、new Panel().var
p.add(new Button("中间按钮"));
p.add(new TextField("测试文本框"));
//最后把Panel容器放到Frame容器里面
frame.add(p);//不指定Panel在Frame区域的位置,则Panel就会默认在Frame的中间位置
//此时就实现了'中间按钮'组件和'测试文本框'组件同时在中间区域显示
//给Frame设置WindowListener监听器,监听用户点击右上角X的动作,则关闭窗口
frame.addWindowListener(new WindowAdapter() {
//采用Java通过的适配器设计模式,我们只需要重写自己需要的方法,例如windowClosing方法,如下
public void windowClosing(WindowEvent e) {
System.exit(0);//原理:退出JVM虚拟机,即退出当前运行的Java程序
}
});
frame.pack();
frame.setVisible(true);
}
}