awt的BoxLayout布局1
为了简化开发,Swing引入了一个新的布局管理器:BoxLayout。BoxLayout可以在垂直和水平两个方向上摆放GUI组件,BoxLayout提供了如下一个简单的构造器BoxLayout:
方法 | 作用 |
---|---|
BoxLayout(Container target, int axis) | 指定创建基于target容器的BoxLayout布局管理器,该布局管理器里的组件按axis方向排列。其中axis有BoxLayout.X_AXIS(横向)和BoxLayout.Y_AXIS(纵向)两个方向 |
awt的BoxLayout布局1_练习
xxxxxxxxxx
package ch29;
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//这里是把Frame容器改成BoxLayout容器,才能使用BoxLayout容器的纵向或横向排列的方法
public class a_3_7awt_BoxLayout1 {
public static void main(String[] args) {
//1、创建Frame对象
Frame frame = new Frame("测试BoxLayout");
//2、创建BoxLayout布局管理器,并指定容器为上面的frame对象,指定组件排列方向为纵向,既下面的两个组件在frame容器里面是上下纵向显示
//BoxLayout boxLayout = new BoxLayout(frame, BoxLayout.Y_AXIS);//2个按钮纵向排列
BoxLayout boxLayout = new BoxLayout(frame, BoxLayout.X_AXIS);//2个按钮水平排列
frame.setLayout(boxLayout);//把boxLayout对象设置给frame容器
//3、往frame对象中添加两个按钮
frame.add(new Button("按钮1"));
frame.add(new Button("按钮2"));
//4、设置frame最佳大小,并可见
frame.pack();
frame.setVisible(true);
//给Frame设置WindowListener监听器,监听用户点击右上角X的动作,则关闭窗口
frame.addWindowListener(new WindowAdapter() {
//采用Java通过的适配器设计模式,我们只需要重写自己需要的方法,例如windowClosing方法,如下
public void windowClosing(WindowEvent e) {
System.exit(0);//原理:退出JVM虚拟机,即退出当前运行的Java程序
}
});
}
//为什么按钮里面的文字出现乱码:idea编码是UTF-8,生成的按钮是由当前win11操作系统创建的,而当前系统的默认编码是中文GBK编码,不一致就会出现乱码
//解决:让编码和解码一致
//具体解决:在idea软件的上方中间靠右一些有一个绿色锤子图标,点击锤子图标右边的输入框,点击下拉的Edit Configurations...,点击弹出来的
//选项卡的Modify options绿色字体,找到Add VM options并勾选,将'-Dfile.encoding=gbk'输入到刚才Modify options蓝色字体的
//下方的三条输入框中的最上面那条输入框里面
}
awt的BoxLayout布局2
在java.swing包中,提供了一个新的容器Box,该容器的默认布局管理器就是BoxLayout,大多数情况下,使用Box容器去容纳多个GUI组件,然后再把Box容器作为一个组件,添加到其他的容器中,从而形成整体窗口布局
方法 | 作用 |
---|---|
static Box createHorizontalBox() | 创建一个水平排列组件的Box容器 |
static Box createVerticalBox() | 创建一个垂直排列组件的Box容器 |
awt的BoxLayout布局2_练习
xxxxxxxxxx
package ch29;
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//这里不需要把哪个容器改成什么就能直接使用纵向或横向排列的方法。既我们直接使用Java提供的swing包下的Box容器就能直接使用纵向或横向排列的方法
public class a_3_8awt_BoxLayout2 {
public static void main(String[] args) {
//1.创建Frame对象
Frame frame = new Frame("测试BoxLayout");
//2.创建一个横向的Box,并添加两个按钮
Box hBox = Box.createHorizontalBox();
hBox.add(new Button("水平按钮一"));
hBox.add(new Button("水平按钮二"));
//3.创建一个纵向的Box,并添加两个按钮
Box vBox = Box.createVerticalBox();
vBox.add(new Button("垂直按钮一"));
vBox.add(new Button("垂直按钮二"));
//4.把box容器添加到frame容器中
frame.add(hBox,BorderLayout.NORTH);
frame.add(vBox);//不指定区域的话,默认就是中间区域
//5.设置frame最佳大小并可见
frame.pack();
frame.setVisible(true);
//给Frame设置WindowListener监听器,监听用户点击右上角X的动作,则关闭窗口
frame.addWindowListener(new WindowAdapter() {
//采用Java通过的适配器设计模式,我们只需要重写自己需要的方法,例如windowClosing方法,如下
public void windowClosing(WindowEvent e) {
System.exit(0);//原理:退出JVM虚拟机,即退出当前运行的Java程序
}
});
}
//为什么按钮里面的文字出现乱码:idea编码是UTF-8,生成的按钮是由当前win11操作系统创建的,而当前系统的默认编码是中文GBK编码,不一致就会出现乱码
//解决:让编码和解码一致
//具体解决:在idea软件的上方中间靠右一些有一个绿色锤子图标,点击锤子图标右边的输入框,点击下拉的Edit Configurations...,点击弹出来的
//选项卡的Modify options绿色字体,找到Add VM options并勾选,将'-Dfile.encoding=gbk'输入到刚才Modify options蓝色字体的
//下方的三条输入框中的最上面那条输入框里面
}
awt的BoxLayout布局3
Box类中,提供了5个方便的静态方法来生成这些间隔组件:
方法 | 作用 |
---|---|
static Component createHorizontalGlue() | 创建一条水平分隔Glue(可在两个方向上同时拉伸的间距) |
static Component createVerticalGlue() | 创建一条垂直分隔Glue(可在两个方向上同时拉伸的间距) |
static Component createHorizontalStrut(int width) | 创建一条指定宽度(宽度固定了,不能拉伸)的水平分隔Strut(可在垂直方向上拉伸的间距) |
static Component createVerticalStrut(int height) | 创建一条指定高度(高度固定了,不能拉伸)的垂直分隔Strut(可在水平方向上拉伸的间距) |
awt的BoxLayout布局3_练习
xxxxxxxxxx
package ch29;
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//这里的就是在Box容器中,对按钮组件生成横向或纵向间隔,就有空隙效果了
//效果图分析:在一个Frame大容器里面,北部有一个横向的BOX,中部有一个纵向的BOX。北部的BOX容器里面有3个不同间隔的按钮,中部同理
public class a_3_9awt_BoxLayout3 {
public static void main(String[] args) {
//1.创建Frame对象
Frame frame = new Frame("测试BoxLayout");
//2.创建一个横向的Box容器,并添加三个按钮,按钮之间添加一个间隔组件
Box hBox = Box.createHorizontalBox();
hBox.add(new Button("水平按钮一"));
//两个方向都可以拉伸的间隔。这行就是分割组件,这行就能把上面和下面那个按钮分隔开来。不写参数就是默认分隔间距
hBox.add(Box.createHorizontalGlue());
hBox.add(new Button("水平按钮二"));
//水平间隔固定,垂直间方向可以拉伸。这行就是分割组件,这行就能把上面和下面那个按钮分隔开来。指定分隔间距
hBox.add(Box.createHorizontalStrut(30));
hBox.add(new Button("水平按钮3"));
//3.创建一个纵向的Box容器,并添加三个按钮,按钮之间添加一个间隔组件
Box vBox = Box.createVerticalBox();
vBox.add(new Button("垂直按钮一"));
//两个方向都可以拉伸的间隔。这行就是分割组件,这行就能把上面和下面那个按钮分隔开来。不写参数就是默认分隔间距
vBox.add(Box.createVerticalGlue());
vBox.add(new Button("垂直按钮二"));
vBox.add(Box.createVerticalStrut(30));//垂直间隔固定,水平方向可以拉伸。这行就是分割组件,这行就能把上面和下面那个按钮分隔开来。指定分隔间距
vBox.add(new Button("垂直按钮三"));
//4.把box容器添加到frame容器中
frame.add(hBox, BorderLayout.NORTH);//把横向的Box容器添加到Frame大容器的北部
frame.add(vBox);//不指定区域的话,默认就是'把横向的Box容器添加到Frame大容器'的中间区域
//5.设置frame最佳大小并可见
frame.pack();
frame.setVisible(true);
//给Frame设置WindowListener监听器,监听用户点击右上角X的动作,则关闭窗口
frame.addWindowListener(new WindowAdapter() {
//采用Java通过的适配器设计模式,我们只需要重写自己需要的方法,例如windowClosing方法,如下
public void windowClosing(WindowEvent e) {
System.exit(0);//原理:退出JVM虚拟机,即退出当前运行的Java程序
}
});
}
//为什么按钮里面的文字出现乱码:idea编码是UTF-8,生成的按钮是由当前win11操作系统创建的,而当前系统的默认编码是中文GBK编码,不一致就会出现乱码
//解决:让编码和解码一致
//具体解决:在idea软件的上方中间靠右一些有一个绿色锤子图标,点击锤子图标右边的输入框,点击下拉的Edit Configurations...,点击弹出来的
//选项卡的Modify options绿色字体,找到Add VM options并勾选,将'-Dfile.encoding=gbk'输入到刚才Modify options蓝色字体的
//下方的三条输入框中的最上面那条输入框里面
}