Java Swing学习笔记——GUI布局管理器
2011-11-07 08:38
246 查看
进行过java GUI编程的人一定都接触过布局管理器,最近研究了一下,写下总结供初学者参考~
GUI布局管理器大致可以分为三种 BorderLayout,FlowLayout,GridLayout
1.BorderLayout
将容器分为北、南、西、东和中心五个部分(叫法和看地图一样,上北下南左西右东),可以根据界面的需要将空间放置在容器的特定位置:
使用实例:
2.FlowLayout顾名思义,“流布局”,也是java GUI的默认布局管理器,将各个控件依次摆放到容器中:
3.GridLayout网格布局,将容器分为相等大小的网格,将空间放入指定网格内
4.GridBagLayout布局管理器,也是Java中最强大的布局管理器,在此着重介绍:
GridBagLayout不像网格布局一相,需要所有的部件的大小、形状相同。而且还可以将某一个部件放在一个固定的位置上
通过一个例子来介绍:
GridBagLayout布局管理器是通过一个GridBagConstraints类来实现效果的。所以,我们要在使用时先定义一个GridBagConstraints类的对象。在这个程序中,我们定义了一个GridBagConstraints类的对象gbdc。
理解GridBagConstraints的各个参数至关重要:
1. gbdc.fill=GridBagConstraints.BOTH 用来指定当“控件小于格子时”,是否将控件“拉伸”?
¨ GridBagConstraints.NONE:不扩张,是默认值;
¨ GridBagConstraints.HORIZONTAL:部件水平扩张,将水平方向的多余空间填满;
¨ GridBagConstraints.VERTICAL:部件垂直扩张,将垂直方向的多余空间填满;
¨ GridBagConstraints.BOTH:部件同时向两个方向扩张,将单元格填满。
2.gridwidth和gridheight ,控件在横向和纵向所占的格子数量(不做更多解释)
3.weightx和weighty控件的“权重”?(最难理解的两个属性),此两个属性说白了,就是用于分配“容器中剩余空间”的,所谓剩余空间,比如说,当你拉伸一个panel在横向增加了100厘米,横向上有3个控件,他们的weightx值依次是0,2,3,那么这100厘米的宽度将如何分配到三个控件所在的格子上呢?
控件1分配 = 0/(0 + 2 + 3) =0/5
控件2分配 = 2/(0 + 2 + 3) =2/5
控件2分配 = 3/(0 + 2 + 3) =3/5
那么这100厘米就按照这个比例附加到三个控件的格子上
请将下面的两个程序运行起来,将注释部分打开再次运行,同时放大缩小窗体看效果即可理解~
GUI布局管理器大致可以分为三种 BorderLayout,FlowLayout,GridLayout
1.BorderLayout
将容器分为北、南、西、东和中心五个部分(叫法和看地图一样,上北下南左西右东),可以根据界面的需要将空间放置在容器的特定位置:
使用实例:
JPanel panel1=(JPanel)getContentPane(); panel1.setLayout(new BorderLayout()); JButton north=new JButton("North"); JButton south=new JButton("South"); JButton east=new JButton("East"); JButton west=new JButton("West"); JButton center=new JButton("Center"); panel1.add(north,BorderLayout.NORTH); panel1.add(south,BorderLayout.SOUTH); panel1.add(east,BorderLayout.EAST); panel1.add(west,BorderLayout.WEST); panel1.add(center,BorderLayout.CENTER);
2.FlowLayout顾名思义,“流布局”,也是java GUI的默认布局管理器,将各个控件依次摆放到容器中:
3.GridLayout网格布局,将容器分为相等大小的网格,将空间放入指定网格内
4.GridBagLayout布局管理器,也是Java中最强大的布局管理器,在此着重介绍:
GridBagLayout不像网格布局一相,需要所有的部件的大小、形状相同。而且还可以将某一个部件放在一个固定的位置上
通过一个例子来介绍:
JPanel panel1=(JPanel)getContentPane(); panel1.setLayout(new GridBagLayout()); GridBagConstraints gbdc=new GridBagConstraints(); gbdc.fill = GridBagConstraints.BOTH; gbdc.weightx=0; panel1.add(new JButton("No.1"),gbdc); gbdc.weightx=2; panel1.add(new JButton("No.2"),gbdc); gbdc.weightx=3; panel1.add(new JButton("No.3"),gbdc); setSize(300,200);
GridBagLayout布局管理器是通过一个GridBagConstraints类来实现效果的。所以,我们要在使用时先定义一个GridBagConstraints类的对象。在这个程序中,我们定义了一个GridBagConstraints类的对象gbdc。
理解GridBagConstraints的各个参数至关重要:
1. gbdc.fill=GridBagConstraints.BOTH 用来指定当“控件小于格子时”,是否将控件“拉伸”?
¨ GridBagConstraints.NONE:不扩张,是默认值;
¨ GridBagConstraints.HORIZONTAL:部件水平扩张,将水平方向的多余空间填满;
¨ GridBagConstraints.VERTICAL:部件垂直扩张,将垂直方向的多余空间填满;
¨ GridBagConstraints.BOTH:部件同时向两个方向扩张,将单元格填满。
2.gridwidth和gridheight ,控件在横向和纵向所占的格子数量(不做更多解释)
3.weightx和weighty控件的“权重”?(最难理解的两个属性),此两个属性说白了,就是用于分配“容器中剩余空间”的,所谓剩余空间,比如说,当你拉伸一个panel在横向增加了100厘米,横向上有3个控件,他们的weightx值依次是0,2,3,那么这100厘米的宽度将如何分配到三个控件所在的格子上呢?
控件1分配 = 0/(0 + 2 + 3) =0/5
控件2分配 = 2/(0 + 2 + 3) =2/5
控件2分配 = 3/(0 + 2 + 3) =3/5
那么这100厘米就按照这个比例附加到三个控件的格子上
请将下面的两个程序运行起来,将注释部分打开再次运行,同时放大缩小窗体看效果即可理解~
package test; import java.awt.*; import javax.swing.*; import java.applet.Applet; public class test extends JApplet { public void init() { JPanel panel1=(JPanel)getContentPane(); panel1.setLayout(new GridBagLayout()); GridBagConstraints gbdc=new GridBagConstraints(); gbdc.fill = GridBagConstraints.BOTH; // gbdc.weightx=0; gbdc.gridwidth=1; panel1.add(new JButton("No.1"),gbdc); // gbdc.weightx=1; gbdc.gridwidth=1; panel1.add(new JButton("No.2"),gbdc); // gbdc.weightx=2; gbdc.gridwidth=1; panel1.add(new JButton("No.3"),gbdc); } }
相关文章推荐
- Java学习笔记之用Box布局swing界面
- java学习笔记(十二) -- Swing先行(1)
- java学习笔记之swing.JOptionPane方法
- Java学习笔记13——Swing开发GUI程序
- Java学习笔记之Swing(二)
- Java学习笔记--Swing
- java swing学习笔记二(画布Canvas)
- JAVA(学习笔记1.1.2)——Swing
- Java学习笔记--Swing2D图形
- java swing学习笔记二(画布Canvas)
- java swing 学习笔记(一)
- 学习笔记-Java swing
- java Swing学习笔记
- [java swing]tame学习笔记一:table单元格合并
- 【Java基础学习笔记】Java中Socket+Swing设计简单通信
- Java GUI学习笔记之初识AWT和Swing
- Java学习笔记--Swing用户界面组件
- Java Swing学习笔记
- java的swing边界的学习笔记
- JAVA学习笔记swing JFrame窗口学习