100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java常用布局管理器(流布局管理器 边界布局管理器 网格布局管理器)

java常用布局管理器(流布局管理器 边界布局管理器 网格布局管理器)

时间:2022-08-10 05:34:32

相关推荐

java常用布局管理器(流布局管理器 边界布局管理器 网格布局管理器)

在Swing中,每个组件在容器中都有一个具体的位置大小、而在容器中摆放各种组件时很难判断其具体位置和大小,使用布局管理器比程序员直接在容器中控制Swing组件的位置和大小方便得多,可以更加有效地处理整个窗体的布局。Swing提供的常用布局管理器有FlowLayout流布局管理器、BorderLayout边界布局管理器和GridLayout网格布局管理器,这些布局管理器位于java.awt包中。下面将对常用的布局管理器进行讲解。

FlowLayout流布局管理器

流布局管理器是最基本的布局管理器,在整个容器中的布局正如其名,像流一样从左到右摆放组件,直到占据了这一行的所有空间,然后在向下移动一行,默认情况下,组件在每一行都是居中排列的,但是通过设置也可以更改组件在每一行上的排列位置。FlowLayout类中有以下常用的构造方法:

public FlowLayout()public FlowLayout(int alignment)public FlowLayout(int alignment,int horizGap,int vertGap)

构造方法中的alignment参数表示使用流布局管理器后组件在每一行的具体摆放位置,它可以被赋予FlowLayout.LEFT、FlowLayout.CENTER和FlowLayout.RIGHT这三个值中的任意一个,它们的详细说明见下表:

在public FlowLayout(int alignment,int horizGap,int vertGap)构造方法中还存在horizGap与vertGap两个参数,这两个参数分别以像素为单位指定组件之间的水平间隔与垂直间隔

下面是一个使用流布局管理器的实例,代码如下:

import java.awt.Container;import java.awt.FlowLayout;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.WindowConstants;public class Demo extends JFrame {public Demo() {setTitle("本窗体使用流布局管理器"); // 设置窗体标题Container c = getContentPane();// 设置窗体使用流布局管理器,使组件右对齐,组件之间的水平间隔为10像素,垂直间隔10像素setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 10));for (int i = 0; i < 10; i++) { // 在容器中循环添加10个按钮c.add(new JButton("button" + i));}setSize(300, 200); // 设置窗体大小// 设置窗体关闭方式setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);setVisible(true); // 设置窗体可见}public static void main(String[] args) {new Demo();}}

返回结果:

从本实例可以看出,如果改变整个窗口大小,其中组件的摆放位置也会相应地发生变化,正好验证了使用流布局管理器时组件从左到右摆放的效果,当组件填满一行后,将自动换行直到所有的组件都摆放到容器为止,默认效果图是左边,手动改变窗体大小,如右图。

BorderLayout边界布局管理器

创建完窗体后,在默认不指定窗体布局的情况下,Swing组件的布局模式是边界布局,边界布局管理器可以将容器划分为东、南、西、北、中5个区域,如下图:

设计窗体时,可以将组件加入到边界布局管理器的5个区域中,另外,在调用Container类的add()方法向容器中添加组件时,可以设置此组件在边界布局管理器中的区域,区域的控制可以由BorderLayout类中的成员变量来决定,这些成员变量的具体含义如下表:

注意:如果使用了边界布局管理器,在向容器中添加组件时,如果不指定添加到那个区域,则默认添加到CENTER区域,如果向一个区域中添加多个组件,后放入的组件会覆盖先放入的组件。

下面是一个使用边界布局管理器的实例,代码如下:

import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.WindowConstants;public class Demo extends JFrame {public Demo() {setTitle("这个窗体使用边界布局管理器");Container c = getContentPane(); // 定义一个容器setLayout(new BorderLayout()); // 设置容器为边界布局管理器JButton centerBtn = new JButton("中"), northBtn = new JButton("北"), southBtn = new JButton("南"),westBtn = new JButton("西"), eastBtn = new JButton("东");c.add(centerBtn, BorderLayout.CENTER);// 中部添加按钮c.add(northBtn, BorderLayout.NORTH);// 北部添加按钮c.add(southBtn, BorderLayout.SOUTH);// 南部添加按钮c.add(westBtn, BorderLayout.WEST);// 西部添加按钮c.add(eastBtn, BorderLayout.EAST);// 东部添加按钮setSize(350, 200); // 设置窗体大小setVisible(true); // 设置窗体可见// 设置窗体关闭方式setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);}public static void main(String[] args) {new Demo();}}

返回结果:

GridLayout网格布局管理器

网格布局管理器将容器划分为网格,所以组件可以按行或列进行排列,在网格布局管理器中,每一个组件的大小都相同,并且网格的个数由网络的行数和列数决定,比如一个2行2列的网格能产生4个大小相等的网格,组件从网格的左上角开始,按照从左到右、从上到下的顺序加入到网格中,而且每一个组件都会填满整个网格,改变窗体的大小、组件的大小也会随之改变。

网格布局管理器主要有以下两个常用的构造方法:

public GridLayout(int rows,int columns)public GridLayout(int rows,int columns,int horizGap,int vertGap)

在上述构造方法中,rows和columns参数代表网格的行数与列数,这两个参数只有一个参数可以为0,代表一行或一列可以排列任意多个组件,参数horizGap与vertGap指定网格之间的间距,其中horizGap参数指定网格之间的水平间距,vertGap参数指定网格之间的垂直间距。

下面来看一个在应该程序中使用网格布局管理器的实例,代码如下:

import java.awt.Container;import java.awt.GridLayout;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.WindowConstants;public class Demo extends JFrame {public Demo() {Container c = getContentPane();/** 设置容器使用网格布局管理器,设置7行3列的网格。* 组件间水平间距为5像素,垂直间距为5像素*/setLayout(new GridLayout(7, 3, 5, 5));for (int i = 0; i <= 20; i++) {c.add(new JButton("button" + i)); //循环添加按钮}setSize(300, 300);setTitle("这是一个使用网格布局管理器的窗体");setVisible(true);setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}public static void main(String[] args) {new Demo();}}

返回结果:

从上面实例可以看出,尝试改变窗体大小,将发现其中的组件大小也会发生相应的改变。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。