布局管理器(五)——GridBagyout

布局管理器(五)——GridBagyout
布局管理器(五)——GridBagyout

布局管理器(五)——GridBagyout(1)

博客分类:

Java GUI

JavaGridBagLayoutGridBagConstraints

到目前为止,已经整理了Java三大基本布局,即流布局、网格布局、边框布局。但对于复杂的问题而言,只使用前面的这四种布局显然不够。在Windows 中常常会发现很多应用程序没有解决好布局这个问题,比如“Cancel”在德语中为“Abbrechen”,如果在开始拖动组件的时候,组件的大侠刚好设计成“Cancel”的大小,那么在德语版本中就会出现问题了,字符串将会被剪切掉一部分。Windows中的按钮不能动态的增大以适应标签,因为用户界面设计的时候没有给出组件在那个方向增大的命令。组件只保存了像素位置和尺寸大小。 Java 布局管理是一种用于组件布局的好方法,应用布局管理器,布局就可以使用组件间关系的指令来完成布局操作。

GridLayout(网格组布局)是Java中目前最灵活的布局管理器,但也由于其复杂性和某些行为的不直观,该布局管理器并不很受欢迎,不过按特定布局排列组件时,只有GridBagLayout才具有足够的灵活性,因此该布局管理器虽然复杂但是任然常用。

GridBagLayout顾名思义,与GridLayout有些相似,不过只是表面上相似,除了都能将容器划分为网格之外,并无其他相同点,两者主要差别如下:1.使用GridLayout时,组件的网格位置取决于组件添加到容器中的顺序,而使用GridBagLayout能够显式定义组件的网格位置。

2.GridLayout中的每一个组件恰好占用一个网格单元,而GridBagLayout管理的组件可以跨越多行或者多列网格。

3.GridLayout为没一行分配相同的高度,为每一列分配相同的宽度,使得网格单元具有相同的尺寸。而GridBagLayout敲好相反,允许每一行有各自的高度,每一列有各自的宽度,理论上使每个单元格具有不同的尺寸。

4.GridLayout不支持约束,而GridBagLayout允许每个组件指定不同的约束值,并用这些约束值定义组件在网格中的尺寸和位置。

GridBagLayout难点主要体现在:

1.约束数量与约束作用相互作用:GridBagConstraints中封装了11个约束值,每个子组件都会分配相应的GridBagConstraints实例,虽然单个约束并不复杂,但约束值之间的相互作用和约束与其他组件约束的相互作用就相当复杂了。

2.行高和列宽:为每一行提供单独高度、为每一列提供单独宽度是GridBagLayout的一大优点,但这也为使用GridBagLayout带来了难度,某些情况下,尤其是在包含大量组件的复杂布局中,很难计算某个组件的尺寸和位置,因而容易犯错,导致布局结果异于设计要求。

3.组件位置:查看Grid中的组件时,不需要源代码也能看出组件所占用的网格

单元。这是因为所有单元的尺寸相同且单元之间一一对齐,而要在GridLayout 中找到组件所占用的单元则比较困难,因为当组件跨越多行或多列时,单元宽度和高度都会变化。

4.组件尺寸:其他大部分布局管理器都用建议规则来确定组件的实际尺寸,但GridBagLayout在这方面提供更强大的灵活性也伴随着更大的复杂性。

GridBagLayout只有一个无参的构造函数,因此创建实例很简单。GridBagLayout管理的容器中添加的每一个组件都关联一组约束值,这些约束值封装在GridBagConstraints类的实例中。

GridBagConstraints提供两个构造函数:无参构造函数和传递11个约束值的构造函数,尽管这两个构造函数都可使用,但后一个构造函数传递的参数实在是太多了,即使熟悉GridBagLayout的人也难以理解使用,因此应尽量避免使用这种形式。此外Java中很少有这种情况,不实用 get/set方法来取值和赋值也能直接访问对象中字段的情况,实际上是因为GridBagLayout并未提供为其属性取值/赋值的方法,因此设置属性就必须直接对属性赋值。

Java代码

1.GridBagConstraints gbc=new GridBagConstraints();

2.gbc.gridx=0;

3.gbc.gridy=3;

GridBagLayout管理的容器添加组件使用add()方法并传递Component参数和约束的Object参数,当然也可以使用只有 Component引用参数的简化形式。不过使用该简化形式时,必须先调用GridBagLayout中的setConstraints()方法将组件和约束值关联。

Java代码

1.GridBagLayout gbLayout=new GridBagLayout();

2.setLayout(gbLayout);

3.GridBagConstraints gbc=new GridBagConstraints():

4.JButton button=new JButton("Test");

5.//需要先将按钮与一组约束相关联,然后都在添加到容器内

6.gbLayout.setConstraints(button,gbc);

7.add(button);

8.

9./**

10.*//除此之外,可以使用add()方法的另一种形式,传递表示约束信息

的参数

11.*add(button,gbc);

12.*

13.*/

上面的两种方法均可行,但对大多数人来说,使用后者更为直观,需要的代码更简洁。虽然容器添加的组件通常不止一个,且每个组件都有格子的约束值,但可以为所有组件使用同一个GridBagConstraints实例,因为GridBagLayout

管理的容器添加组件时,该布局管理器会使用GridBagConstraints的clone()方法进行行为的约束的深拷贝。也就是说,添加组件时候,会复制组件关联的GridBagConstraints对象并将对象副本保存到GridBagLayout中以备引用。因此可以重复使用同一个GridBagConstraints对象,由该布局管理器负责复制该对象。总结上面的使用GridBagLayout就是:

1.建立一个GridBagLayout的对象。不需要指定网格的行数和列数。布局管理器会根据后面所给的信息猜测出来

2.将GridBagLayout设为该容器的默认布局管理器

3.为每一个组件建立一个GridBagConstraints对象(可使用同一个GridBagConstraints对象,需针对每个子组件设置其属性),设置GridBagConstraints对象的域以便指出组件在网格组中的布局方案

4.最后,(推荐)通过下面的调用添加组件的约束:add(component,constraints); GridBagConstraints对象的状态对GridBagLayout来说是非常重要的,下

面详细介绍几个最重要的约束。

1:gridx、gridy,gridwidth、gridheight

这些约束定义了组件在网格中的位置。gridx和gridy指定了被添加组件左上角的行、列位置,gridwidth和gridheight指定了组件占据的行数和列数。网格的坐标从(0,0)开始,gridx=0和gridy=0代码最左上角。gridx=2,gridy=0,gridwidth=1、 gridheight=4表示该约束起始于0行2列,横跨了4行1列。

gridx和gridy默认值都是GridBagConstraints.RELATIVE,gridx使

用默认值== 指定将组件放置在添加此组件之前刚刚添加到容器中的组件的后面,gridy使用默认值== 指定将组件放置在添加此组件之前刚刚添加到容器中的组

件的下面。此外,gridx和gridy都是非负值,awt文档中建议不要将gridx和gridy设置为绝对位置,推荐使用使用相当于位置

GridBagConstraints.RELATIVE,然后按照标准的顺序,将组件添加到网格组布局中。

gridheight和gridwidth非负,默认为1。一般可以指定一个适当的值来设置组件跨越的行数或者列数,但是如果希望组件扩展到最好一行或者最后一列,则不要给出一个实际的数值,而是用常量GridBagConstraints.REMAINDER

替代,这样会告诉布局管理器这个组件是本行上的最后一个组件。

2:增量域

在网格布局中,需要为每个区域设置增量域(weightx和weighty)。如果增量域设置为0.0(默认值),则在这个区域将永远为初始尺寸,增加的多余空间会被左右平均、上下平均分配到组件的四周,即让组件显示在分配区域的中间。

从概念上讲,增量参数属于行和列的属性,而不是属于某个单元格。但却需要在单元格中指定它们,因为网格组布局并不会暴露行和列。行和列的增量等于每行或每列单元格的增量最大值。因此,想让某行或者某列保持不变,就需要将这行或这列的所有组件的增加都设置为0。

3:fill和anchor

默认情况下,组件尺寸应为其首选尺寸或最小尺寸,而不是分配给组件的单元尺寸。如果需要组件在区域内拉伸可设置其fill约束。当组件的显示区域大于组件区域的大小时使用此字段。它可以确定是否调整组件大小,以及在需要的时候如何进行调整。

?NONE :使用组件自然尺寸0。(默认)

?HORIZONTAL :加宽组件,使它在水平方向上填满其显示区域,但是不改变高度。

?VERTICAL :加高组件,使它在垂直方向上填满其显示区域,但是不改变宽度。

?BOTH :使组件完全填满其显示区域。

当组件小于分配区域时(即组件没有填充至整个区域)。可以通过设置anchor 域指定其位置。可能的值有三种:

相对于方向的值:相对于方向的值是相对于容器的组件方向属性进行解释的, PAGE_START:沿显示区域的边缘居中放置组件,等同于水平方向的 NORTH PAGE_END:沿显示区域的边缘居中放置组件,等同于水平方向的 SOUTH。 LINE_START:沿显示区域的边缘居中放置组件,在该区域中,等同于水平的、从左到右方向的 WEST,以及水平的、从右到左方向的 EAST。

LINE_END:沿显示区域的边缘居中放置组件,在该区域中,等同于水平的、从左到右方向的 EAST,以及水平的、从右到左方向的 WEST。

FIRST_LINE_START:将组件置于其显示区域的一角。等同于水平的、从左到右方向的 NORTHWEST,以及水平的、从右到左方向的 NORTHEAST。

FIRST_LINE_END:将组件置于显示区域的一角,在该区域中。等同于水平的、从左到右方向的 NORTHEAST,以及水平的、从右到左方向的 NORTHWEST。

LAST_LINE_START:将组件置于其显示区域的一角。等同于水平的、从左到右的 SOUTHWEST,以及水平的、从右到左方向的 SOUTHEAST。

LAST_LINE_END:将组件置于其显示区域的一角。等同于水平的、从左到右的 SOUTHEAST,以及水平的、从右到左方向的 SOUTHWEST。

相对于基线的值:相对于基线值是相对于基线进行解释,

BASELINE : 指定组件应该沿主要行的基线水平居中和垂直对齐。如果组件没有基线,那么它会垂直居中对齐。

BASELINE_LEADING : 指定组件应沿开始边水平放置。对于从左到右方向的组件,开始边是左边。组件沿主要行的基线垂直对齐。如果组件没有基线,那么它会垂直居中对齐。

BASELINE_TRAILING : 指定组件应沿结尾边水平放置。对于从左到右方向的组件,结尾边是右边。组件沿主要行的基线垂直对齐。如果组件没有基线,那么它会垂直居中对齐。

ABOVE_BASELINE : 指定组件应该水平居中对齐。垂直放置组件,使它的

底边接触到开始行的基线。如果开始行没有基线,那么它会垂直居中对齐。

ABOVE_BASELINE_LEADING : 指定组件应沿开始边水平放置。对于从左到右方向的组件,开始边是左边。垂直放置组件,使它的底边接触到开始行的基线。如果开始行没有基线,那么它会垂直居中对齐。

ABOVE_BASELINE_TRAILING : 指定组件应沿结尾边水平放置。对于从左到右方向的组件,结尾边是右边。垂直放置组件,使它的底边接触到开始行的基线。如果开始行没有基线,那么它会垂直居中对齐。

BELOW_BASELINE : 指定组件应该水平居中对齐。垂直放置组件,使它的底边接触到开始行的基线。如果开始行没有基线,那么它会垂直居中对齐。

BELOW_BASELINE_LEADING : 指定组件应沿开始边水平放置。对于从左到右方向的组件,开始边是左边。垂直放置组件,使它的底边接触到开始行的基线。如果开始行没有基线,那么它会垂直居中对齐。

BELOW_BASELINE_TRAILING : 指定组件应沿结尾边水平放置。对于从左到右方向的组件,结尾边是右边。垂直放置组件,使它的底边接触到开始行的基线。如果开始行没有基线,那么它会垂直居中对齐。

绝对值:

CENTER(默认值):将组件置于其显示区域的中心。

NORTH:将组件置于其显示区域的顶部,并在水平方向上居中。

NORTHEAST:将组件置于其显示区域的右上角。

EAST:将组件置于其显示区域的右部,并在垂直方向上居中。

SOUTHEAST:将组件置于其显示区域的右下角。

SOUTH:将组件置于其显示区域的底部,并在水平方向上居中。

SOUTHWEST:将组件置于其显示区域的左下角。

WEST:将组件置于其显示区域的左部,并在垂直方向上居中。

NORTHWEST:将组件置于其显示区域的左上角。

4.填塞(Insets属性和ipadx,ipady)

通过指定GridBagConstraints的insets域在组件周围增加附加的空白区域,通过设置Insets对象的left、top、right 和bottom指定组件周围的空间量,这种被称之为外部填塞。等同于其他布局管理器中所用的水平间隙和垂直间隙,不过GridBagLayout的这一约束更加灵活可以为每个组件设置不同的Insets对象,可以在组件的每一边设置不同的间隙值。要设置组件的插入值,可以创建Insets类的对象实例,或者创建GridBagConstraints对象时修改自动创建的Insets实例。最后需要注意的是:组件不允许覆盖组件显示区域的插入部分,就算用了 fill约束拉伸组件也不行。

通过设置ipadx和ipady称之为内部填塞,这两个值会被添加到组件的最小宽度和最小高度上面,这样可以保证组件不会收缩至最小尺寸以下。这两个属性默认为0。

布局管理器(五)——GridBagyout 编辑(2)

博客分类:

Java GUI

上一篇中对GridBagLayout的整理主要来自《Java核心技术第八版(卷I)》和《Java 高级编程(第二版)》以及网上一些信息的整理,还是显得内容比较冗长,复杂,内容太多。下面对上一篇做一个简单的归纳拓展。

GridBagLayout管理的容器中添加的每一个组件都关联一组约束值,这些约束值封装在GridBagConstraints类的实例中。 GridBagConstraints提供两个构造函数:无参构造函数和传递11个约束值的构造函数,尽管这两个构造函数都可使用,但后一个构造函数传递的参数实在是太多了,一般都是使用无参构造函数,然后修改自己设定的部分约束值,指的说明的是,GridBagConstraints的这11个约束值并不是通过get/set方式来设定,而是直接通过【对象.属性(如 constraints.fill)】来设定,虽然容器添加的组件通常不止一个,且每个组件都有格子的约束值,但可以为所有组件使用同一个GridBagConstraints实例。

GridBagConstraints的11个参数:

1)int gridx,gridy

指定单元格的起始行和列,默认为0。

2)int gridwidth,gridheight

指定跨越单元格的行和列的范围,默认为1。

3)double weightx,weighty

单元格在扩大时的增量域,默认为0.0

4)int fill

指定组件在单元格内的填充行为,默认为NONE

5)int anchor

表示组件在单元格内的对齐方式,默认为CENTER

6)int ipadx,ipady

指定组件周围的内部填充,默认为0。

7)Insets insets

指定组件边框周围的外部填充,默认为不填充。

因为GridBagConstraints类没有set方法来设置其属性,而且类名较长,这儿可以使用帮助类GBC来实现GridBagConstraints的约束值的设置:

1.名字简短:GBC extends GridBagConstraints

2.创建最床用的构造函数GBC(int gridx,int gridy)和GBC(int gridx,int gridy,int Gridwidth,int gridheight)

3.设置便捷的setter,setter方法返回this,使得可以继续链接它们

GBC setGridXY(int gridx,int gridy){…… return this;};

GBC setGridWH(int gridweight,int gridheight){…… return this;};

GBC setWeight(double weightx,double weighty){…… return this;};

GBC setAncho r(int anchor){…… return this;};

GBC setFill(int fill){…… return this;};

GBC setInsets(Insets insets){…… return this;};

GBC setIpad(int ipadx,ipady){…… return this;};

使用网格组布局的一些步骤:

1.在纸上画出组件布局草图

2.找出一种网格,小组件被放置在一个单元格内,大组件将横跨多个单元格

3.用0,1,2....标识网格的行和列,现在可以读取gridx,gridy,gridwidth 和gridheight的值

4.对于每个组件,考虑如下问题:是否需要水平或者垂直填充它所在的单元格?如果不需要,那么那么希望如何排列?这些就是fill和anchor参数的设置

5.将所有组件的增量设置为100.如果需要某行或者某列始终保持默认的大小,将将这行的weightx和weighty设置为0

6.编写代码,仔细检查GridBagConstraints的设置,错误的约束可能会破坏整个布局

7.编译、运行

布局管理器主要包括

布局管理器主要包括:FlowLayout,BorderLayout,GridLayout,CardLayout,GridBagLayout 例3 import java.awt.*; public class ExGui{ private Frame f; private Button b1; private Button b2; public static void main(String args[]){ ExGui that = new ExGui(); that.go(); } public void go(){ f = new Frame("GUI example"); f.setLayout(new FlowLayout()); //设置布局管理器为FlowLayout b1 = new Button("Press Me"); //按钮上显示字符"Press Me" b2 = new Button("Don't Press Me"); f.add(b1); f.add(b2); f.pack(); //紧凑排列,其作用相当于setSize(),即让窗口 尽量小,小到刚刚能够包容住b1、b2两个按钮 f.setVisible(true); } } 查看运行结果 1. FlowLayout FlowLayout 是Panel,Applet的缺省布局管理器。其组件的放置规律是从上到下、从左到右进行放置,如果容器足够宽,第一个组件先添加到容器中第一行的最左边,后续的组件依次添加到上一个组件的右边,如果当前行已放置不下该组件,则放置到下一行的最左边。 构造方法主要下面几种: FlowLayout(FlowLayout.RIGHT,20,40); /*第一个参数表示组件的对齐方式,指组件在这一行中的位置是居中对齐、居右对齐还是居左对齐,第二个参数是组件之间的横向间隔,第三个参数是组件之间的纵向间隔,单位是象素。*/ FlowLayout(FlowLayout.LEFT);

Java三大布局介绍

图形用户界面(GUI)(Graphics User Interface ,GUI) 三大界面布局介绍 一、边界布局BorderLayout –介绍 边界布局BorderLayout使用 边界布局BorderLayout—注意事项 1、不是五个部分都必须添加 2、中部组件会自动的调节大小 3、JFrame,JDialog默认布局管理器就是BorderLayout 二、流式布局FlowLayout---介绍 FlowLayout布局,按组件的添加次序将按钮组件(当然也可以是别的组件)从左到右放置在容器中。当到达容器的边界时,组件将放置在下一行中,FlowLayout可以以左对齐,居中对齐,以右对齐的方式排列组件。 流式布局FlowLayout—注意事项 1、不限制他所管理的组件大小,(即:不能改变组件的大小)允许他们有最佳大小。 2、当容器被缩放时,组件的位置可能变化,但组件的大小不变。 3、默认组件是居中对齐,可以通过FlowLayout(int align)函数,来指定对齐方式。 三、网格布局GridLayout—介绍

GridLayout布局,听其名而知其意,它将容器分割成多行多列,组件被填充到网络中,添加到容器中的组件首先放置在左上角的网格中,然后从左到右放置其它的组件,当占满该行的所有网格后,接着继续在下一行从左到右放置组件。 网络布局GridLayout---注意事项 1、组件的相对位置不随容器缩放而变化,但大小会变化。 2、所有组件的大小相同。 3、可以通过GridLayout(int rows,int cols,int hgap,int vgap)来指定网络的 行/列,水平间隙/垂直间隙。 参数说明:rows - 该 rows 具有表示任意行数的值零 cols - 该 cols 具有表示任意列数的值零 hgap - 水平间距 vgap - 垂直间距 开发GUI程序一般步骤: 1、引包 import java.awt.*; import javax.swing.*; 2、继承JFrame public class Demo3 extends JFrame {} 3、定义需要的组件 //3.定义组件 JButton jb1,jb2,jb3,jb4,jb5; int size=9; JButton jbs[]=new JButton[size]; //先分配初始空间 4、创建组件 //4.创建组件 jb1=new JButton("中部"); //创建组件 for(int i=0;i

Java布局管理器setLayout() 华清课设

Java布局管理器setLayout() 2008-02-17 19:22 1。FlowLayout public FlowLayout(int align,int hgap,int vgap) 创建一个新的流布局管理器,具有指定的对齐方式以及指定的水平和垂直间隙。 对齐参数的值必须是以下之一:FlowLayout.LEFT、FlowLayout.RIGHT、FlowLayout.CENTER、FlowLayout.LEADING 或FlowLayout.TRAILING。 参数: align - 对齐值 hgap - 组件之间以及组件与Container 的边之间的水平间隙 vgap - 组件之间以及组件与Container 的边之间的垂直间隙 2GridLayout public GridLayout(int rows, int cols, int hgap, int vgap)创建具有指定行数和列数的网格布局。给布局中的所有组件分配相等的大小。 此外,将水平和垂直间距设置为指定值。水平间距将置于列与列之间。将垂直间距将置于行与行之间。 rows 和cols 中的一个可以为零(但不能两者同时为零),这表示可以将任何数目的对象置于行或列中。 所有GridLayout 构造方法都服从这一规定。 参数: rows - 该rows 具有表示任意行数的值零 cols - 该cols 具有表示任意列数的值零 hgap - 水平间距 vgap - 垂直间距 3,BorderLayout public BorderLayout(int hgap, int vgap)用指定的组件之间的水平间距构造一个边界布局。水平间距由hgap 指定,而垂直间距由vgap 指定。 参数: hgap - 水平间距。 vgap - 垂直间距。

GroupLayout布局管理器介绍

GroupLayout布局管理器介绍 GroupLayout 是一个 LayoutManager,它将组件按层次分组,以决定它们在Container 中的位置。GroupLayout 主要供生成器使用,但也可以手工编码。分组由Group类的实例来完成。GroupLayout 支持两种组。串行组 (sequential group) 按顺序一个接一个地放置其子元素。并行组 (parallel group) 能够以四种方式对齐其子元素。 每个组可以包含任意数量的元素,其中元素有 Group、Component 或间隙 (gap)。间隙可被视为一个具有最小大小、首选大小和最大大小的不可见组件。此外,GroupLayout 还支持其值取自 LayoutStyle 的首选间隙。 元素类似于一个弹簧。每个元素都有一个范围,由最小大小、首选大小和最大大小指定。间隙的范围由开发人员指定,或者由 LayoutStyle 确定。Component 的范围通过 Component 的 getMinimumSize、getPreferredSize 和getMaximumSize 方法确定。此外,添加 Component 时,可以指定使用一个特定范围,而不使用该组件的范围。Group 的范围由组的类型确定。ParallelGroup 的范围是其元素范围的最大值。SequentialGroup 的范围是其元素范围的总和。 GroupLayout 将每个轴 (axis) 单独对待。也就是说,存在一个表示水平轴的组和一个表示垂直轴的组。水平组负责确定沿水平轴的最小大小、首选大小和最大大小,并设置所包含组件的 x 和宽度。垂直组负责确定沿垂直轴的最小大小、首选大小和最大大小,并设置所包含组件的 y 和高度。每个 Component 都必须同时存在于水平组和垂直组中,否则,在布局过程中或者在请求最小大小、首选大小或最大大小时,将抛出 IllegalStateException。 下图显示了一个沿水平轴的串行组。该串行组包含三个组件。沿垂直轴使用了一个并行组。 为了强调要单独对待每个轴,该图显示了沿每个轴的每个组和元素的范围。每个组件的范围已被投射到轴上,两个组分别呈现为蓝色(水平)和红色(垂直)。为了便于理解,串行组中的每个元素之间都有一个间隙。 沿水平轴的串行组呈现为蓝色实线。注意,串行组是它所包含的子元素的总和。 沿垂直轴,并行组是每个组件高度的最大值。由于三个组件的高度都相同,所以并行组具有相同的高度。

java swing布局管理器

学籍管理系统 Java Swing布局管理器 科尔沁艺术职业学院计算机科学与技术系2008级(普理)班曹容赫 指导教师苏春源 摘要:院校规模不断扩大,学生数量不断增多,原来的人工记录的方式,甚至是一般的数据存储管理软件不能满足学生管理的需求。传统管理方式维护数据性能低、查询信息不方便、选课效率低、维护成绩信息的工作量大,为弥补以上缺陷,便于信息管理与维护,提高管理效率,从而开发此学籍管理系统,以实现学院的信息化管理。 关键词Java.*Swing 用户名管理 Kerqin Art Institute of evaluating teaching career system Kerqin Art Vocational College, Department of Computer Science and Technology 2008 (2)Cao ronghe Abstract:The institutions have been expanding, increasing the number of students, the original way of manual records, or even a general data storage management software can not meet the management needs of students. Performance of the traditional low-maintenance data management, query information is not convenient, course selection, low efficiency, heavy workload to maintain performance information for more than make up for deficiencies, facilitate information management and maintenance, and improve management efficiency, in order to develop the school management system to achieve School of Information Management. Key words java*swing The user's name manages 引言 为了学院更方便的管理各院系开设的课程,让学生更方便地选课并及时了解个人课程及成绩信息,同时提高学院的信息化水平,学籍管理系统对成绩管理、学籍管理、班级管理、课程设置、选课信息等几个方面进行管理,真正实现管理信息化,且弥补了过去传统的数据信息管理的低效率问题。 1、需求分析 经过讨论此系统的开发是有必要的,针对此系统的使用群体有学生、家长、教师等。此系统可以根据相应信息对学生信息进行更有效的管理。还应用了Java *Swing 来编写主体布局界面,使操作更简单、更实用。

java笔记4(布局管理器常用组件qq聊天界面记事本)

Java笔记4(布局管理器、常用组件、qq聊天界面、记事本) 文件结构Java代码布局管理器Demo8_1.java package com.test1; import javax.swing.JButton; import javax.swing.JFrame; public class Demo8_1 extends JFrame //继承JFrame { /** * @param args */ public static void main(String[] args) { Demo8_1 demo8_1=new Demo8_1(); } //把需要的组件定义在这里JButton jb1=null; //定义一个按钮//构造函数public Demo8_1() { ////JFrame是一个顶层容器类(可以添加其它swing组件的类) //JFrame jf=new JFrame(); //给窗体设置标题 this.setTitle("Hello world"); //设置大小,按像素this.setSize(200, 200); //设置初始位置 this.setLocation(100,200); //创建一个按钮 jb1=new JButton("我是一个按钮!"); //添加JButton组件this.add(jb1); //设置当关闭窗口时,保证JVM也退出 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //显示this.setVisible(true); } } 常用组件常Demo8_2.java /* * BorderLayout演示*

GridBagLayout(网格布局管理器)结构分析与功能使用详解

java.awt 类 GridBagLayout https://www.360docs.net/doc/f88783926.html,ng.Object java.awt.GridBagLayout 所有已实现的接口: LayoutManager, LayoutManager2, Serializable public class GridBagLayout extends Object implements LayoutManager2, Serializable GridBagLayout类是一个灵活的布局管理器,它不要求组件的大小相同便可以将组件垂直、水平或沿它们的基线对齐。每个GridBagLayout对象维持一个动态的矩形单元网格,每个组件占用一个或多个这样的单元,该单元被称为显示区域。 每个由GridBagLayout管理的组件都与GridBagConstraints的实例相关联。Constraints 对象指定组件的显示区域在网格中的具体放置位置,以及组件在其显示区域中的放置方式。除了 Constraints 对象之 外,GridBagLayout还考虑每个组件的最小大小和首选大小,以确定组件的大小。 网格的总体方向取决于容器的ComponentOrientation属性。对于水平的从左到右的方向,网格坐标 (0,0) 位于容器的左上角,其中 X 向右递增,Y 向下递增。对于水平的从右到左的方向,网格坐标 (0,0) 位于容器的右上角,其中 X 向左递增,Y 向下递增。 为了有效使用网格包布局,必须自定义与组件关联的一个或多个GridBagConstraints对象。可以通过设置一个或多个实例变量来自定义GridBagConstraints对象: GridBagConstraints.gridx、GridBagConstraints.gridy 指定包含组件显示区域的前导角的单元,在此显示区域中,位于 网格原点的单元地址是 gridx = 0, gridy = 0。对于水平的从左到右的布局,组件的前导角是其左上角。对于水平的从右到左的 布局,组件的前导角是其右上角。使用 GridBagConstraints.RELATIVE(默认值),指定会将组件直接放置在之前刚添加到容器中的组件的后面(沿 X 轴向为 gridx 或Y 轴向为 gridy)。 GridBagConstraints.gridwidth、GridBagConstraints.gridheight

整理页面布局

Android常用布局类整理(一) Android常用布局类整理 layout_width/layout_height的两种不同的方式 ①wrap_content能包裹其中的内容即可 ②fill_parent/match_parent 填满父视图的空间 FrameLayout 最简单的布局管理器,把每一个子视图放置在边框内,默认左上角,使用gravity属性来改变其位置,添加多个子视图时,会堆积在前一个子视图上面,并遮挡住上一个子视图LinearLayout

按垂直(vertical)或水平(horizontal)对齐每一个子视图,它包含的子控件将以横向或竖向的方式排列,垂直方向的布局是N行单列的结构,水平方向的布局是单行N列的结构,允许为每一个子视图制定一个weight属性,以控制在可用空间内的相对大小 android:layout_weight="1" 通过设置控件的layout_weight属性以控制各个控件在布局中的相对大小,描述该元素在剩余空间中占有的大小比例。 线性布局会根据该控件layout_weight值与其所处布局中所有控件layout_weight值之和的比值为该控件分配占用的区域。 例子:在水平布局的LinearLayout中有两个Button,这两个Button的layout_weight 属性值都为1,那么这两个按钮都会被拉伸到整个屏幕宽度的一半。如果layout_weight

指为0,控件会按原大小显示,不会被拉伸(默认就是0);对于其余layout_weight属性值大于0的控件,系统将会减去layout_weight属性值为0的控件的宽度或者高度,再用剩余的宽度或高度按相应的比例来分配每一个控件显示的宽度或高度。 ==========以下是button的layout_width属性设为wrap_content的时候的情况,意味着控件要优先尽可能的小===================== ①三个button的weight都不设定,默认为0,每个button占用自己本身的空间 ②三个button的weight都设置为1 android:layout_weight="1",每个button都占用1/3 ③三个button的weight分别设定为0,1,2,test占用自己原来大小,test2占用剩余空间的1/3,test3占用剩余空间的2/3 ==========以下是button的layout_width属性设为fill_parent的时候的情况,意味着控件要优先尽可能的大=====================

三十三、Java图形化界面设计——布局管理器之null布局(空布局)

三十三、Java图形化界面设计——布局管理器之null布局(空布局) 一般容器都有默认布局方式,但是有时候需要精确指定各个组建的大小和位置,就需要用到空布局。 操作方法: 1)首先利用setLayout(null)语句将容器的布局设置为null布局(空布局)。 2)再调用组件的setBounds(int x, int y, int width,int height)方法设置组件在容器中的大小和位置,单位均为像素。 x为控件左边缘离窗体左边缘的距离 y为控件上边缘离窗体上边缘的距离 width为控件宽度 height为控件高度 实例:使用空布局精确定位组件的位置 // NullLayoutDemo.java

import java.awt.*; import javax.swing.*; public class NullLayoutDemo{ JFrame fr; JButton a,b; NullLayoutDemo() { fr = new JFrame(); fr.setBounds(100,100,250,150); //设置窗体为空布局 fr.setLayout(null); a=new JButton("按钮a"); b=new JButton("按钮b"); fr.getContentPane().add(a); //设置按钮a的精确位置 a.setBounds(30,30,80,25);

fr.getContentPane().add(b); b.setBounds(150,40,80,25); fr.setTitle("NullLayoutDemo"); fr.setVisible(true); fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fr.setLocationRelativeTo(null); //让窗体居中显示} public static void main(String args[]){ new NullLayoutDemo(); } } 程序运行结果如下:

android实验3界面设计:布局管理器

西安邮电大学 (计算机学院) 课内实验报告实验名称:界面设计:布局管理器 专业:网络工程 班级: 姓名: 学号: 指导教师: 日期:2017年5月4日

一.实验目的 1. 了解四种布局管理器的区别和各自特别的属性 2. 掌握四种布局管理器的应用场合和用法 3. 灵活使用四种布局文件管理器和嵌套实现各种复杂布局 4. 掌握复用XML布局文件的方法 5. 掌握代码控制UI界面的方法 二.实验环境 JDK的版本: "1.8.0_40" IDE: eclipse 4.6.1 模拟器: 夜神模拟器 三.实验内容 设计的样式,完成Android应用UI的应用开发 四.实验过程及分析 1.用JA V A代码设置全屏 打开工程src目录下的主Activity文件,在onCreate方法中的执行语句super. onCreate(savedInstanceState)之前,添加如下两句语句 requestWindowFeature(Window.FEATURE_NO_TITLE); //隐藏标题栏this.getWindow().setFlags(https://www.360docs.net/doc/f88783926.html,youtParams.FLAG_F ULLSCREEN,https://www.360docs.net/doc/f88783926.html,youtParams.FLAG_FULLSCREEN); //隐藏运营商图标、电量等 2. 按照图1设计的样式,完成一个Android应用UI的开发 (1)添加代码

JAVA布局管理器

前言 随着Internet的飞速发展,Java技术也得到了越来越广泛的应用。而无论我们是采用J2SE、J2EE还是J2ME,GUI都是不能回避的问题。现在的应用软件越来越要求界面友好、功能强大而又使用简单。而众所周知,在Java中进行GUI设计相对于其跨平台、多线程等特性的实现要复杂和麻烦许多。这也是很多Java 程序员抱怨的事情。但GUI已经成为程序发展的方向,所以我们也必须了解Java 的GUI设计方法和特点。其实,采用Java提供的布局管理器接口和相应的布局管理类,我们也可以做出相当漂亮的界面来,当然实现起来肯定要比VB麻烦许多。本文试图通过自己的开发经历介绍一些具体的应用实例,希望能给那些曾经象我一样苦闷的Java痴迷者一些帮助。 2 Java中的布局管理器 2.1 为什么要使用布局 在实际编程中,我们每设计一个窗体,都要往其中添加若干组件。为了管理好这些组件的布局,我们就需要使用布局管理器。比如说,设计一个简单的计算器,或一个文本编辑器等等。这些组件是让JVM 自己任意安排呢?还是按照一定的位置关系进行规范的安排呢?当然应该选择后者。将加入到容器的组件按照一定的顺序和规则放置,使之看起来更美观,这就是布局。在Java中,布局由布局管理器 (LayoutManager) 来管理。那么,我们在什么时候应该使用布局管理器?应选择哪种布局管理器?又该怎样使用布局管理器呢? 如果你写的是GUI程序,在使用AWT/Swing组件时就不应硬性设置组件的大小和位置,而应该使用Java的布局管理器(LayoutManager)来设置和管理可视组件的大小和位置,否则就有可能造成布局混乱。不信,你可以新建一个Frame(或JFrame),通过setBounds()方法往其中添加几个Button(或JButton),一旦你将窗体拉大或缩小时,你会发现组件的排列完全不是按你所预想的那样。为了解决这个问题,即当窗体(或容器)缩放时,组件位置也随之合理调整,我们就需要使用布局管理器。 为此,我们首先要知道Java的布局方式,Java提供的API中有些什么布局管理器,它们的布局特点是什么。 2.2 Java的布局方式 我们都知道,Java的GUI界面定义是由AWT类包和Swing类包来完成的。它在布局管理上采用了容器和布局管理分离的方案。也就是说,容器只管将其他组件放入其中,而不管这些组件是如何放置的。对于布局的管理交给专门的布局管理器类(LayoutManager)来完成。 现在我们来看Java中布局管理器的具体实现。我们前面说过,Java中的容器类(Container),它们只管加入组件(Component),也就是说,它只使用自己的

JAVA布局管理

JA V A布局管理 一、FlowLayout(流布局管理):其组件的放置规律是从上到下,从左到右依次进行放置。构造方法有下列几种: 1.F lowLayout():创建每行组件居中对齐、组件间距为5个像素单位。 2.F lowLayout(int align):创建指定每行的对齐方式、组件间距为5个像素单位。 align取值表示组件的对齐方式:CENTER(居中对齐),LEFT(左对齐),RIGHT(右对齐)。 二、BorderLayout(边框布局管理):将容器分为上、下、左、右、中五个区域,分别对应North(北区),South(南区),West(西区),East(东区)和Center(中区)。用add(component,index)方法向容器中添加组件,其中第二个参数指明组件位置,其取为:BorderLayout.North,BorderLayout.South,BorderLayout.East,BorderLayout.West,BorderLayout.Center。其构造方法有中下几种: 1.B orderLayout():创建组件间无间距的布局对象。 2.B orderLayout(int hgap,int vgap):创建指定组件间距的布局对象。

三、GridLayout(网格布局管理器):将容器分成尺寸相同 的网格,组件被放在网格的空白处,顺序与流式布局一样。 网格中组件大小相同。其构造方法有下列几种: 1.GridLayout()以每行一列的方式构建一个GridLayout 对象。 2.GridLayout(int row,int columns):根据指定行数和列数 构造一个GridLayout对象,组件间距为0。 3.GridLayout(int row,int columns,int hgap,int,vgap): 根据 指定行数和列数构造一个GridLayout对象,组件间距按指定值设置。 四、CardLayout( 卡片布局管理器):它将组件放在一系 列卡片上,一次只能看到一张卡片,一张卡片只能放一个组件。使用构造方法CardLayout()可以构建CardLayout对象。 组件按添加顺序存放在卡片序列中,使用下列方法将组件添加到容器中: add(Component,component,String name); name是卡片中组件的标识。 为了使组件在使用CardLayout容器中可见,可使用CardLayout对象的下列方法: 1)first(Container container):显示第一张卡片。 2) last(Container container):显示最后一张卡片。

java布局管理

一、实验目的:(详见指导书,宋体小四) 掌握Java图形Swing组件和布局管理器的使用; 掌握使用Java事件处理机制的使用。 掌握图形界面的各种控件的使用,如:标签、文本框、按钮、复选框、列表框、窗框等。 二、实验要求:(详见指导书,宋体小四) 1.采用布局管理器进行界面的布局; 2. 学会对不同的事件用相应的事件处理器; 3.写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提材示, 并给出解决办法。(附运行界面、源代码)。 三、实验内容及过程:(宋体小四,) 1.编写Application程序,在JFrame中加入2个按钮(JButton)和1个标签 (Label),单击两个按钮,显示按钮的标签于Label。 过程:首先建立一个主类,让主类继承JFrame 类实现 ActionListener 接口。然后在主类中声明变量JButton ,JPanel。创建一个面板panel然后在创建两个按钮,面板使用流式布局,然后将两个按钮添加到面板中,再将面板添加到窗体的上部。然后在建立一个标签,将标签添加到窗体的下方。最后要在两个按钮失眠分别添加监听器,保证当触动按钮时按钮上的字体能够出现在标签上。 2.在JApplet中加入1个文本框,1个文本区,每次在文本框中输入文本,回车后将文本添加到文本区的最后一行。 过程:首先创建一个窗体,窗体里插入一个文本框和一个文本区,分别将文本框放在窗体的上方,文本区放在窗体的下方。重点就是在文本框上添加一个键盘监听器,保证当触动Enter键时能够将文本框中的内容复制到文本区中即可。 3.设计一个简单计算器,如下图所示。在“操作数”标签右侧的两个文本框输入操作数,当单击操作符+,-,×,÷按钮时,对两个操作数进行运算并将

实验2 UI界面开发--布局管理器的使用

实验2、View及布局管理器的使用 一、实验目的 1、了解View类、ViewGroup的作用 2、掌握常用布局管理器的使用 3、掌握XML界面控制的设计方法 4、从本周起,以后每次小课的实验内容,要求上传FTP。 二、实验步骤 1、线性布局的例子,补充代码,使程序运行效果如下所示 图1 线性布局 LinearlayoutDemo.java代码不用做任何修改,直接通过main.xml文件控制UI 界面。 下面是布局文件main.xml中的内容,请补充完整,实现图1中的界面: //排列方式(horizontal水平排列,vertical垂直排列)

android:layout_height="wrap_content" android: layout_weight ="2"//设置所占相对宽度 android:background="#aa0000" android:gravity="center_vertical"//设置主件对齐方式 android:singleLine="true"//若为true,看不到的文字用……表示 android:text=" 广州大学华软软件学院" android:textSize="15pt"/> 2、相对布局管理器的使用,补充代码,使程序运行的效果如下图所示: 图2相对布局运行效果 RelativeLayoutDemo.java中的源代码如下所示:

AutoCAD 工程师参考样题

2013 AutoCAD 工程师参考样题 1)为了保证布局空间尺寸标注与模型空间的对象保持关联性,必须将系统变量DIMASSOC 设置成多少 1 2 3 参考答案:3 2)下列哪一个选项不属于solview 的命令参数? UCS(U) 正交(O) 辅助(A) 立面(E) 参考答案:4 3)在标注对象时:关联标注的打开和关闭是由哪一个系统变量控制? assocdim assoconoff dimassoc assocupdate 参考答案:3 4)如图所示,左图中的“销连接”和“轴装配”,右图中“底座局部”和“全图”,分别代表什么? 左图为DWG 文件,右图为DWF 文件 左图为模型空间,右图为布局 左图为模型视图,右图为图纸视图 左图为图纸视图,右图为模型视图 参考答案:3

5)关于发布、传递和归档图纸集的说法下列说法不正确的是: 可使用CTRL 键从图纸选择中添加和删除项目不能直接修改图纸选择,而是要先激活图纸选择并进行修改既可以基于现有图形从头开始创建图纸集,也可以使用图纸集样例作为样板进行创建以上说法均不正确参考答案:4

Autodesk 2013 认证6)相机的新增功能中,广角相机的镜头为多少? 50MM 35MM 16MM 6MM 参考答案:2 7)标准渲染预设中,哪个渲染质量是最好的? 草图质量 中等质量 高级质量 演示质量 参考答案:4 8)渲染中,暗角和光源中的低频率变化,通过哪个途径可以减少或消除? 全局照明 集中采集 光源特性 以上都可以 参考答案:2 9)在Streering Wheels 控制盘中,单击动态观察选项,可以围绕轴心进行动态观察,动态观察的轴心使用鼠标加什么键盘可以调整? Shift Ctrl Alt Tab 参考答案:2 10)三维十字光标中,下面哪个不是十字光标的标签? X,Y,Z N,E,Z N,Y,Z 以上说法均正

Java_swing布局详解(附示例图)

当选择使用JPanel和顶层容器的content pane时,需要考虑布局管理。JPanel缺省是初始化一个FlowLayout,而content pane缺省是初始化一个BorderLayout。 下面将分别介绍几种最常用的布局管理器:FlowLayout、BorderLayout、BoxLayout、CardLayout、GridLayout和GridBagLayout。 代码演示 每一个布局管理器都会有一个代码演示,xxxLayoutDemo.java(见附件)。这些文件主要有三个方法组成: addComponentsToPane()提供布局逻辑(依据不同的布局管理器和UI内容)。 Java代码 1public static void addComponentsToPane(Container pane) {。。。} 2/** 3*createAndShowGUI()实例化一个JFrame,通过它的ContentPane加载布局逻辑内容。 4*/ 5private static void createAndShowGUI() { 6// Create and set up the window. 7JFrame frame = new JFrame("FlowLayoutDemo"); 8frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 9// Set up the content pane. 10addComponentsToPane(frame.getContentPane()); 11// Display the window. 12frame.pack(); 13frame.setVisible(true); 14} 15//main()程序入口,单独起一个线程,实例化UI。 16public static void main(String[] args) {

二十九、Java图形化界面设计——布局管理器之FlowLayout(流式布局)

二十九、Java图形化界面设计——布局管理器之FlowLayout (流式布局) 前文讲解了JFrame、JPanel,其中已经涉及到了空布局的使用。Java虽然可以以像素为单位对组件进行精确的定位,但是其在不同的系统中将会有一定的显示差异,使得显示效果不尽相同,为此java提供了布局管理器,以使编写的图形界面具有良好的平台无关性。 注意:所有的布局管理器均是针对容器来使用的,包括顶层容器和中间容器。 一、布局管理器所属类包

二、容器的默认布局管理器 各容器都有默认的布局管理,见下表: 三、FlowLayout(流式布局)

使用FlowLayout布局方式的容器中组件按照加入的先后顺序按照设置的对齐方式(居中、左对齐、右对齐)从左向右排列,一行排满(即组件超过容器宽度后)到下一行开始继续排列。 1、流式布局特征如下: l 组件按照设置的对齐方式进行排列 l 不管对齐方式如何,组件均按照从左到右的方式进行排列,一行排满,转到下一行。(比如按照右对齐排列,第一个组件在第一行最右边,添加第二个组件时,第一个组件向左平移,第二个组件变成该行最右边的组件,这就是从左向右方式进行排列) 2、流式布局FlowLayout类的常用构造函数和方法

3、FlowLayout 布局应用代码段举例 1) 设置FlowLayout 布局 JFrame fr=new JFrame( ); FlowLayout flow=new FlowLayout( ); fr.setLayout(flow); 上面的语句可以简化成: fr.setLayout(new FlowLayout()); 2) 设置框架fr为组件左对齐的FlowLayout布局 fr.setLayout(newFlowLayout(FlowLayout.LEFT)); 3) 设置框架fr为组件左对齐的FlowLayout布局,并且组件的水平间距为20像素,垂直间距为40像素。 fr.setLayout(new FlowLayout(FlowLayout.LEFT,20,40)); 实例:对齐方式 // FlowLayoutDemo.java importjavax.swing.*;

Swing常见布局管理器总结

1、BorderLayout 边界布局管理器 北区:页首(PAGE_START)north 南区:页尾(PAGE_END)south 西区:行首(LINE_START) west 东区:行尾(LINE_END)east 我们也可以在内容窗格的顶头放置工具栏,底部放置状态栏 工具栏和状态栏的高度都是不变的,但长度随框架大小而改变 这正好是边界型布局的北区、南区的特点 因此,北区和南区可以放置工具栏和状态栏,同时会根据框架的大小自动调整面板、工具栏和状态栏的大小 对于此类界面,可以将主工作区放在中间区里,辅助工具区放在周边的东、南、西、北四个区域的某一个区域中: 缺省情况下,边界型布局的各区之间没有空隙,组件彼此靠在一起 可以指定区域间的水平间隙和垂直间隙: JPanel panel = new JPanel(); panel.setLayout(new BorderLayout(5, 5)); 2、BoxLayout(盒子布局器) 它没有空构造函数,必须给出两个参数: 需要它管理的容器对象 组件排列的轴线方向,轴线方向有两种: LINE_AXIS(或者X_AXIS)表示组件按横线排成一行; PAGE_AXIS(或者Y_AXIS)表示组件按纵向排成一列 组件的对齐方式(Alignment): 对于纵向排列的组件,有3种对齐方式: btn1.setAlignmentX(Component.LEFT_ALIGNMENT); btn1.setAlignmentX(Component.CENTER_ALIGNMENT); btn1.setAlignmentX(Component.RIGHT_ALIGNMENT); 对齐方式是组件本身的性质,而不是布局管理器的性质。因此,你需要调用每个组件本身的setAlignmentX函数来设定对齐方式

java_图形界面_布局管理_边界布局_JFrame

* 显示一个经过边界布局的窗口,理解图形界面 * 布局管理器 * JFrame * BorderLayout * 边界布局 */ package com.test1; //package com.GUI; import java.awt.*; import javax.swing.*; public class Demo8_2 extends JFrame //继承JFrame,顶层容器{ JButton jb1,jb2,jb3,jb4,jb5;//声明JButton ,一种容器类组件 public static void main(String[] args) { Demo8_2 demo8_2=new Demo8_2(); //实例化一个类对象 } public Demo8_2() //构造函数

//创建JButton jb1=new JButton("中部"); jb2=new JButton("北部"); jb3=new JButton("东部"); jb4=new JButton("南部"); jb5=new JButton("西部"); //添加各个组件,把JButton加入JFrame对象 this.add(jb1,BorderLayout.CENTER); this.add(jb2,BorderLayout.NORTH); this.add(jb3,BorderLayout.EAST); this.add(jb4,BorderLayout.SOUTH); this.add(jb5,BorderLayout.WEST); //设置窗体属性 this.setTitle("边界布局");//标题 this.setSize(400,300); //窗体大小 this.setLocation(300,200);//窗体坐标 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口默认推出程序 //显示窗体 this.setVisible(true); } }

相关文档
最新文档