java应用管理器_Java窗体应用程序布局管理器

本文介绍了Java Swing中常用的布局管理器,包括绝对布局、流式布局、网格布局和边界布局。通过实例展示了如何使用这些布局管理器来安排组件的位置和尺寸,帮助理解Java窗体应用程序的布局管理。
摘要由CSDN通过智能技术生成

窗体里面有很多组件,这些组件对在窗体中的摆放位置和组件尺寸都有自身的要求,程序员添加这些组件到窗体时,该如何安排这些组件在窗体的位置和尺寸呢?这就需要用到Swing的布局管理器。下面主要介绍常用的布局管理器。

绝对布局

程序员需要设置每个组件在窗体的大小和位置,在实际编程中,较少采用这种布局管理。使用绝对布局,程序员可以采用下面的步骤:

(1)调用窗体的setLayout方法取消窗体的默认布局。调用方法如下:

窗体对象.setLayout(null);

(2)调用组件的setBounds方法,设置组件在窗体的位置和大小。调用方法如下:

组件对象. setBounds(x, y, w, h)

其中,x和y是组件在窗体的坐标,w是窗体的宽度,h是窗体的高度。

案例1:创建一个窗体,该窗体使用绝对布局,在窗体中添加两个JLabel组件。

在项目PCoreUnit13下新建layout包,在layout包内新建JFreamAbsolutelyTest类。代码如下:

packagelayout;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.WindowConstants;/*** @ClassName: JFreamAbsolutelyTest* @Description: Swing程序设计(常用布局管理器)案例1* @author 编程训练营* @date**/publicclass JFreamAbsolutelyTest {/*** @Title: main* @Description:Java程序入口main方法* @param@param args 参数* @return void 返回类型* @throws*/publicstaticvoid main(String[] args) {// 实例化JFrame对象JFrame frame = new JFrame("窗体绝对布局");// 创建一个标签组件JLabel label1 = new JLabel("这是第一个组件");JLabel label2 = new JLabel("这是第二个组件");// 窗体设置为绝对布局frame.setLayout(null);//设置窗体的大小label1.setBounds(20, 100, 250, 100);label2.setBounds(300, 150, 250, 100);// 将label组件添加到容器frame.add(label1);frame.add(label2);// 设置窗口的宽度和高度frame.setSize(500,500);// 窗口居中frame.setLocationRelativeTo(null);// 设置窗口可见frame.setVisible(true);//设置窗口关闭方式,窗口关闭程序退出frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);}}

程序执行结果如下图所示:

995ec8c32accace676f48ecd79662a5d.png

流式布局

窗体按照组件加入的先后顺序,遵循从左到右,从上到下的排列方式来安排组件在窗体的位置。具体安排方式:先从窗体的第一行从左到右开始安排组件,当第一行的组件位置已满时,再从第二行开始安排,以此类推。

流式布局用FlowLayout类来定义,FlowLayout类有三个构造方法,具体说明如下:

public FlowLayout()

该构造方法使用默认方式创建流式布局,组件在窗体中使用居中对齐方式,组件之间的水平和垂直间距都为默认的5个单位。

public FlowLayout(int align)

该构造方法使用指定的对齐方式和默认的5单位水平和垂直间距创建流式布局。参数align可以是下列值之一:,FlowLayout.RIGHT, FlowLayout.CENTER,FlowLayout.LEADING,FlowLayout.TRAILING。

public FlowLayout(int align, int hgap, int vgap)

该构造方法使用指定的对齐方式和指定的水平和垂直间距创建流布局。参数hgap和vgap分别指定水平间距和垂直间距。

案例2:创建一个窗体,该窗体使用流式布局,在窗体中添加多个JLabel组件。

在layout包内新建JFreamFlowLayoutTest类。代码如下:

importjava.awt.FlowLayout;* @ClassName: JFreamFlowLayoutTest* @Description: Swing程序设计(常用布局管理器)案例2publicclass JFreamFlowLayoutTest {JFrame frame = new JFrame("窗体流式布局");// 设置窗体为流式布局frame.setLayout(new FlowLayout(FlowLayout.LEFT,20,20));// 使用循环添加JLabel组件for( int i = 1; i < 21; i++ ){JLabel label = new JLabel("这是第" + i + "个组件");frame.add(label);}

161d87725a520a15fbd1ba9b75d1ec7d.png

网格布局

将窗体按M行N列方式均匀分隔多个网格,每个网格只能存放一个组件。组件按照加入的先后顺序,遵循从左到右,从上到下的排列方式被安置在每个网格中。

网格布局用GridLayout类来定义,GridLayout类有三个构造方法,具体说明如下:

public GridLayout()

该构造方法创建网格布局,默认为每一个组件在一行中有一列,即多行单列。

public GridLayout(int rows, int cols)

该构造方法创建具有指定行数和列数的网格布局。参数rows指定行数,参数cols指定列数。

public GridLayout(int rows, int cols, int hgap, int vgap)

该方法创建具有指定行数和列数的网格布局,并指定每个网格间的水平和垂直间距。参数hgap指定网格间的水平间距,参数vgap指定网格间的垂直间距。

案例3:创建一个窗体,该窗体使用网格布局,在窗体中添加多个JLabel组件。

在layout包内新建JFreamGridLayoutTest类。代码如下:

importjava.awt.GridLayout;* @ClassName: JFreamGridLayoutTest* @Description: Swing程序设计(常用布局管理器)案例3* @datepublicclass JFreamGridLayoutTest {* @param@param args 参数** @return void 返回类型 @throwsJFrame frame = new JFrame("窗体网格布局");// 设置窗体为3行2列的网格布局frame.setLayout(new GridLayout(3,2));for (int i = 1; i < 7; i++) {JLabel label = new JLabel(" 这是第" + i + "个组件");

1a36bc3b9ebce5828b69f82878cd7dee.png

边界布局

在边界布局中,窗体空间被分为五个区域:CENTER、EAST、WEST、NORTH、SOUTH。依次对应为:北(NORTH)、南(SOUTH)、西(WEST)、东(EAST),中(CENTER)。边界布局是窗体默认的布局。

f9015bc9d1898c44a391a618926b288b.png

开发者可以把组件放在窗体这五个位置中的任意一个,如果未指定位置,则缺省的位置是CENTER。

边界布局由BorderLayout类定义,BorderLayout类常用的构造方法说明如下:

public BorderLayout()

该构造方法创建一个边界布局,组件之间没有间距。

public BorderLayout(int hgap, int vgap)

该构造方法使用组件之间指定的间距创建一个边界布局。

窗体调用add方法添加组件时,可以设置待添加的组件在边界布局中的五个区域之一,这五个区域可以由下列值表示:

BorderLayout. NORTH

窗体添加组件时,将组件置于窗体的顶端(北区域)。

BorderLayout. SOUTH

窗体添加组件时,将组件置于窗体的底端(南区域)。

BorderLayout. EAST

窗体添加组件时,将组件置于窗体的右端(东区域)。

BorderLayout. WEST

窗体添加组件时,将组件置于窗体的左端(西区域)。

BorderLayout. CENTER

窗体添加组件时,将组件置于窗体的中间(中区域)。

案例4:创建一个窗体,该窗体使用边界布局,在窗体中添加多个JLabel组件。

在layout包内新建JFreamBorderLayoutTest类。代码如下:

importjava.awt.BorderLayout;

importjavax.swing.SwingConstants;* @ClassName: JFreamBorderLayoutTest* @Description: Swing程序设计(常用布局管理器)案例4publicclass JFreamBorderLayoutTest {JFrame frame = new JFrame("窗体边界布局");// 设置窗体边界布局frame.setLayout(new BorderLayout(30,30));// 添加JLabel组件到窗体顶端JLabel label1 = new JLabel("这个组件在顶端");label1.setHorizontalAlignment(SwingConstants.CENTER);frame.add(BorderLayout.NORTH,label1);// 添加JLabel组件到窗体左端JLabel label2 = new JLabel("这个组件在左端");label2.setHorizontalAlignment(SwingConstants.CENTER);frame.add(BorderLayout.WEST,label2);// 添加JLabel组件到窗体右端JLabel label3 = new JLabel("这个组件在右端");label3.setHorizontalAlignment(SwingConstants.CENTER);frame.add(BorderLayout.EAST,label3);// 添加JLabel组件到窗体中间JLabel label4 = new JLabel("这个组件在中间");label4.setHorizontalAlignment(SwingConstants.CENTER);frame.add(BorderLayout.CENTER,label4);JLabel label5 = new JLabel("这个组件在底端");label5.setHorizontalAlignment(SwingConstants.CENTER);frame.add(BorderLayout.SOUTH,label5);

85b3b09a4a6491b9bba77f09af2d31f7.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值