布局管理器
所属类包
布局管理器名称
说明
Java.awt
FlowLayout(流式布局)
组件按照加入的先后顺序按照设置的对齐方式从左向右排列,一行排满到下一行开始继续排列
BorderLayout(边界布局)
容器划分为东、西、南、北、中五个区域,每个区域只能放置一个组件。
GridLayout(网格布局)
容器的空间划分成M×N列的网格区域, 每个区域只能放置一个组件。
CardLayout(卡片布局)
如同一叠牌,每个牌对应一个组件,但每次只能显示其中的一张牌。适用于在一个空间中防止多个组件的情况
GridBagLayout(网格包布局)
GridLayout的升级版,组件仍然是按照行、列放置,但是每个组件可以占据多个网格
Java.swing
BoxLayout(箱式布局)
允许在容器中纵向或者横向防止多个控件
SprigLayout(弹簧布局)
根据一组约束条件放置控件
无
空布局
不使用布局管理器,按照控件自身提供的大小、位置信息放置控件
容器的默认布局管理器
容器
默认布局方式
顶层容器
JFrame
BorderLayout(边界布局)
JDialog
BorderLayout(边界布局)
JApplet
FlowLayout(流式布局)
中间容器
JPanel
FlowLayout(流式布局)
FlowLayout(流式布局)
使用FlowLayout布局方式的容器中组件按照加入的先后顺序按照设置的对齐方式(居中、左对齐、右对齐)从左向右排列,一行排满(即组件超过容器宽度后)到下一行开始继续排列。
流式布局特征如下:
组件按照设置的对齐方式进行排列,不管对齐方式如何,组件均按照从左到右的方式进行排列,一行排满,转到下一行。(比如按照右对齐排列,第一个组件在第一行最右边,添加第二个组件时,第一个组件向左平移,第二个组件变成该行最右边的组件,这就是从左向右方式进行排列)
流式布局FlowLayout类的常用构造函数和方法
构造函数
名称
用途
FlowLayout()
构造一个新的 FlowLayout,它是默认居中对齐的,默认的水平和垂直间隙是5个像素
FlowLayout(int align)
构造一个新的 FlowLayout,它具有指定的对齐方式,默认的水平和垂直间隙是 5 个像素
五个参数值及含义如下:
0或FlowLayout.lEFT ,控件左对齐
1或FlowLayout.CENTER ,居中对齐
2或FlowLayout.RIGHT ,右对齐
3或FlowLayout.LEADING,控件与容器方向开始边对应
4或FlowLayout.TRAILING,控件与容器方向结束边对应
如果是0、1、2、3、4之外的整数,则为左对齐
FlowLayout(int align, int hgap, int vgap)
创建一个新的流布局管理器,它具有指定的对齐方式以及指定的水平和垂直间隙。
方法
名称
用途
Void setAlignment(int align)
设置此布局的对齐方式。
void setHgap(int hgap)
设置组件之间以及组件与 Container 的边之间的水平间隙。
void setVgap(int vgap)
设置组件之间以及组件与 Container 的边之间的垂直间隙。
BorderLayout
边界布局管理器把容器的的布局分为五个位置:CENTER、EAST、WEST、NORTH、SOUTH。依次对应为:上北(NORTH)、下南(SOUTH)、左西(WEST)、右东(EAST),中(CENTER),如下图所示。
特征:
可以把组件放在这五个位置的任意一个,如果未指定位置,则缺省的位置是CENTER。
南、北位置控件各占据一行,控件宽度将自动布满整行。东、西和中间位置占据一行;若东、西、南、北位置无控件,则中间控件将自动布满整个屏幕。若东、西、南、北位置中无论哪个位置没有控件,则中间位置控件将自动占据没有控件的位置。
常见的构建函数和方法
构造方法摘要
BorderLayout(): 构造一个组件之间没有间距(默认间距为0像素)的新边框布局。
BorderLayout(int hgap, int vgap) : 构造一个具有指定组件(hgap为横向间距,vgap为纵向间距)间距的边框布局。
方法摘要
int
getHgap() :返回组件之间的水平间距。
int
getVgap() :返回组件之间的垂直间距。
void
setHgap(int hgap):设置组件之间的水平间距。
void
setVgap(int vgap) :设置组件之间的垂直间距。
实例
1 packagestudy_小容器1;
2
3 import javax.swing.*;
4
5 import java.awt.*;
6
7 public class BorderLayout1 extendsJFrame {
8
9 JPanel p=newJPanel();
10
11 publicBorderLayout1(){
12
13 setLayout(new BorderLayout(5,5));
14
15 setFont(new Font(“Helvetica”, Font.PLAIN, 14));
16
17 getContentPane().add(“North”, new JButton(“North”));
18
19 getContentPane().add(“South”, new JButton(“South”));
20
21 getContentPane().add(“East”, new JButton(“East”));
22
23 getContentPane().add(“West”, new JButton(“West”));
24
25 //设置面板为流式布局居中显示,组件横、纵间距为5个像素
26
27 p.setLayout(new FlowLayout(1,5,5));
28
29 //使用循环添加按钮,注意每次添加的按钮对象名称都是b
30
31 //但按钮每次均是用new新生成的,所有代表不同的按钮对象。
32
33 for(int i=1;i<10;i++){
34
35 //String.valueOf(i),将数字转换为字符串
36
37 JButton b=newJButton(String.valueOf(i));
38
39 p.add(b); //将按钮添加到面板中
40
41 }
42
43 getContentPane().add(“Center”,p); //将面板添加到中间位置
44
45 }
46
47 public static voidmain(String args[]) {
48
49 BorderLayout1 f = newBorderLayout1();
50
51 f.setTitle(“边界布局”);
52
53 f.pack(); //让窗体自适应组建大小
54
55 f.setVisible(true);
56
57 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
58
59 f.setLocationRelativeTo(null); //让窗体居中显示
60
61 }
62
63 }
GridLayout
网格布局特点:
使容器中的各组件呈M行×N列的网格状分布。
网格每列宽度相同,等于容器的宽度除以网格的列数。
网格每行高度相同,等于容器的高度除以网格的行数。
各组件的排列方式为:从上到下,从左到右。
组件放入容器的次序决定了它在容器中的位置。
容器大小改变时,组件的相对位置不变,大小会改变。
设置网格布局行数和列数时,行数或者列数可以有一个为零。若rows为0,cols为3,则列数固定为3,行数不限,每行只能放3个控件或容器。若cols为0,rows为3,则行数固定为3,列数不限,且每行必定有控件,若组件个数不能整除行数,则除去最后一行外的所有行组件个数为:Math.ceil(组件个数/rows)。
Math.ceil(double x):传回不小于x的最小整数值。比如行数为3,组件数为13个,则Math.ceil(13/3)=5,即第一行,第二行组件数各为5个,剩下的组件放在最后一行。
若组件数超过网格设定的个数,则布局管理器会自动增加网格个数,原则是保持行数不变。
构造方法摘要
GridLayout():创建具有默认值的网格布局,即每个组件占据一行一列。
GridLayout(int rows, int cols) :
创建具有指定行数和列数的网格布局。Rows为行数,cols为列数。
GridLayout(int rows, int cols, int hgap, int vgap) :
创建具有指定行数、列数以及组件水平、纵向一定间距的网格布局。
方法摘要
int
getColumns() :获取此布局中的列数。
int
getHgap():获取组件之间的水平间距。
int
getRows() :获取此布局中的行数。
int
getVgap() :获取组件之间的垂直间距。
void
setColumns(int cols) :将此布局中的列数设置为指定值。
void
setHgap(int hgap):将组件之间的水平间距设置为指定值。
void
setRows(int rows):将此布局中的行数设置为指定值。
void
setVgap(int vgap) :将组件之间的垂直间距设置为指定值。
toString():返回此网格布局的值的字符串表示形式。
1 packagestudy_小容器1;2 import java.awt.*;3 import javax.swing.*;4 public class GridLayout1 extendsJFrame{5 JPanel p=new JPanel(new GridLayout(4,4,3,3));//定义面板,并设置为网格布局,4行4列,组件水平、垂直间距均为3
6 JTextField t=new JTextField(); //定义文本框
7 String str[]={“7″,”8″,”9″,”/”,”4″,”5″,”6″,”*”,”1″,”2″,”3″,”-“,”0″,”.”,”=”,”+”};//定义字符串数组,为按钮的显示文本赋值
8 publicGridLayout1(String s){9 super(s);10 setLayout(new BorderLayout()); //定义窗体布局为边界布局
11 JButton btn[]; //声明按钮数组
12 btn=new JButton[str.length]; //创建按钮数组
13 for(int i=0;i
14 btn[i]=newJButton(str[i]);15 p.add(btn[i]);16
17 }18 getContentPane().add(t,BorderLayout.NORTH); //将文本框放置在窗体NORTH位置
19 getContentPane().add(p,BorderLayout.CENTER); //将面板放置在窗体CENTER位置
20 setVisible(true);21 setSize(250,200);22 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);23 setLocationRelativeTo(null); //让窗体居中显示
24 }25 public static voidmain(String[] args){26 GridLayout1 gl=new GridLayout1(“网格布局”);27 }28 }
View Code
CardLayout
卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过CardLayout类提供的方法可以切换该空间中显示的组件
使用CardLayout类提供的方法可以切换显示该空间中的组件
(1) 定义使用卡片布局的容器
例如:Panel cardPanel=new Panel();
(2) 定义卡片对象:CardLayout 布局对象名称=new CardLayout();
例如:CardLayout card=new CardLayout();
(3) 设置使用卡片布局的容器为卡片布局:
格式:容器名称.setLayout(布局对象名称);
例如:cardPanel.setLayout(card);
(4) 设置容器中显示的组件
例如:for (int i = 0; i < 5; i++) {
cardPanel.add(newJButton(“按钮”+i));
}
(5) 定义响应事件代码,让容器显示相应的组件
布局对象名称.next(容器名称) 显示容器中当前组件之后的一个组件,若当前组件为最后添加的组件,则显示第一个组件,即卡片组件显示是循环的。
布局对象名称.first(容器名称) 显示容器中第一个组件
布局对象名称.last(容器名称) 显示容器中最后一个组件
布局对象名称.previous(容器名称) 显示容器中当前组件之前的一个组件,若当前组件为第一个添加的组件,则显示最后一个组件,即卡片组件显示是循环的.
或者卡片对象名称.show(容器名称,卡片名称)
例如
card.next(cardPanel);
card.previous(cardPanel);
card.first(cardPanel);
card.last(cardPanel);
1 packagestudy_小容器1;2 //cardlayout.java
3 import java.awt.*;4
5 import javax.swing.*;6
7 import java.awt.event.*;//引入事件包8 //定义类时实现监听接口
9 public class cardlayout extends JFrame implementsActionListener{10 JButton nextbutton;11 JButton preButton;12 JButton firstButton;13 Panel cardPanel=newPanel();14 Panel controlpaPanel=newPanel();15 //定义卡片布局对象
16 CardLayout card=newCardLayout();17 //定义构造函数
18 publiccardlayout() {19 super(“卡片布局管理器”);20 setSize(300, 200);21 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);22 setLocationRelativeTo(null);23 setVisible(true);24 //设置cardPanel面板对象为卡片布局
25 cardPanel.setLayout(card);26 //循环,在cardPanel面板对象中添加五个按钮27 //因为cardPanel面板对象为卡片布局,因此只显示最先添加的组件
28 for (int i = 0; i < 5; i++) {29 cardPanel.add(Integer.toString(i),new JButton(i+”图片”));30 }31 //实例化按钮对象
32 nextbutton=new JButton(“下一张卡片”);33 preButton=new JButton(“上一张卡片”);34 firstButton=new JButton(“第一张”);35 //为按钮对象注册监听器
36 nextbutton.addActionListener(this);37 preButton.addActionListener(this);38 firstButton.addActionListener(this);39 controlpaPanel.add(preButton);40 controlpaPanel.add(nextbutton);41 controlpaPanel.add(firstButton);42 //定义容器对象为当前窗体容器对象
43 Container container=getContentPane();44 //将 cardPanel面板放置在窗口边界布局的中间,窗口默认为边界布局
45 container.add(cardPanel,BorderLayout.CENTER);46 //将controlpaPanel面板放置在窗口边界布局的南边,
47 container.add(controlpaPanel,BorderLayout.SOUTH);48 }49 //实现按钮的监听触发时的处理
50 public voidactionPerformed(ActionEvent e){51 if (e.getSource()==nextbutton){52 card.next(cardPanel);53 }54 if (e.getSource()==preButton){55 card.previous(cardPanel);56 }57 if (e.getSource()==firstButton){58 card.show(cardPanel,”0″);59 }60 }61 public static voidmain(String[] args) {62 cardlayout kapian=newcardlayout();63 }64 }
View Code
今天的文章java layout_java_Layout分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/24451.html