首页 > 编程知识 正文

jpanel缺省的布局管理器,为什么要使用布局管理器

时间:2023-05-03 21:04:43 阅读:110184 作者:2766

JAVA接口布局原理:因为JAVA是一种跨平台语言,所以很明显,使用绝对坐标会导致显示因平台和分辨率而异的问题。 为了实现跨平台特性和获得动态布局效果,Java将容器中的所有组件放在一个布局管理器中进行管理。 例如,排列顺序、组件的大小、位置等功能,当窗体移动或调整大小时组件如何变化等,都可以授权给相应的容器布局管理器进行管理,不同的布局管理器采用不同的算法Java有6种布局管理器,通过组合6种布局管理器,可以设计复杂的界面,在不同的操作系统平台上具有一致的显示界面。 6种布局管理器分别是BorderLayout、BoxLayout、FlowLayout、GirdBagLayout、GirdLayout、CardLayout。 其中CardLayout应与其他5种配套使用,并不特别频繁。 每个接口管理器的职务都有各自的作用。 卡布局)卡式布局

CardLayout布局管理器可帮助用户与两个到许多其他成员共享相同的显示空间。 集装箱分为多个层次,每个层次的显示空间占整个集装箱的大小。 但是,每一层只需要同意放置一个组件,当然每一层都可以利用Panel实现复杂的用户界面。 布局管理器(CardLayout )就像一张完全叠好的扑克牌,有54张卡片,但

首先,定义面板,为每个面板设置不同的布局,然后根据需要在每个面板中放置组件:

panel one.set layout (new flowlayout );

panel two.set layout (new gridlayout ) (2,1 );

设置主面板。

CardLayoutcard=newCardLayout (;

Panelmain.setlayout(card;

下一步是将开始准备的面板添加到主面板中

Panelmain.add(redPanel ),panelOne );

Panelmain.add('bluepanel ',panelOne );

add ) )方法有两个参数,第一个参数为String类型,表示面板标题,第二个参数表示Panel对象的名称。

以上步骤结束后,必须为用户提供选择卡片的方法。 一个常用的方法是每个卡片都包含一个button。 常用来控制显示哪个面板。 action监听器已添加到button . action performed ()方法定义显示的卡片。

card.next(Panelmain ); //下一步

card.previous(Panelmain ); //上一个

card.first(Panelmain ); //第一个

card.last(Panelmain ); //最后的

card.show(Panelmain,' redpanel ' ); //特定面板

BorderLayout布局管理器: BorderLayout也是一种非常easy的布局策略,如果容器中的空间在东、西、南、北、中没有区域,并且没有添加任何组件,则只需将空间添加到其中BorderLayout是顶层容器(JFrame、JDialog和JApplet )的默认布局管理器。 有五个位置组件:

此界面最多只能显示五个控件。 添加控件时,可以指定添加的方向。 默认情况下,添加到中间。 在BorderLayout中组织大小时,会调整周围的控件,根据布局管理器的内部规则计算调整应该占据的位置,中央组件会占用剩下的空间。 BorderLayout是窗口、帧和故障的默认布局管理器。 BorderLayout布局管理器将容器分为五个区域来放置:North、South、East、West和Center。 每个区域只能放置一个组件。 使用border。其变化规律是:组件的相对位置不变,大小变化。 例如容器变高时,North、South区域不变,West、Center、East区域变高; 假设集装箱变宽了。 West,East区域不变。 North、Center和South区域变大。 并非所有区域都有组件。 如果周围区域(West、East、North、South区域)中没有组件,则Center区域将完成,但假设Center区域完成。

演示样本:

importjava.awt.*;

publicclassbuttonDir{

publicstaticvoidmain (string args [ ] ) {

framef=newframe(borderlayout );

f.setlayout(newborderlayout ) );

f.add(North ),NewButton ) ) North );

//第一个參数表示把button加入到容器的North区域

f.add("South", new Button("South");

//第一个參数表示把button加入到容器的South区域

f.add("East", new Button("East");

//第一个參数表示把button加入到容器的East区域

f.add("West", new Button("West");

//第一个參数表示把button加入到容器的West区域

f.add("Center", new Button("Center");

//第一个參数表示把button加入到容器的Center区域

f.setSize(200,200);

f.setVisible(true);

}

}FlowLayout布局管理器:流式布局管理器把容器看成一个行集,好象平时在一张纸上写字一样,一行写满就换下一行。行高是用一行中的控件高度决定的。FlowLayout是全部 JApplet/JApplet的默认布局。在生成流式布局时可以指定显示的对齐方式,默认情况下是居中(FlowLayout.CENTER)。在以下的演示样例中,可以用例如以下语句指定居左

JPanel  panel= new JPanel(new FlowLayout(FlowLayout.LEFT)));此为小应用程序(Applet)和面板(Panel)的缺省布局管理器,组件从左上角開始,按从左至右的方式排列.其构造函数为:

FlowLayout()  //生成一个默认的流式布局,组件在容器里居中,每一个组件之间留下5个像素的距离.

FlowLayout(int alinment) //可以设定每行组件的对齐方式.

FlowLayout(int alignment,int horz,int vert) //设定对齐方式并设定组件水平和垂直的距离.

当容器的大小发生变化时,用FlowLayout管理的组件会发生变化,其变化规律是:组件的大小不变,可是相对位置会发生变化.

GirdLayout布局管理器:GridLayout 将成员按网格型排列,每一个成员尽可能地占领网格的空间,每一个网格也相同尽可能地占领空间,从而各个成员按一定的大小比例放置。假设你改变大小, GridLayout将相应地改变每一个网格的大小,以使各个网格尽可能地大,占领Container容器全部的空间。

基本布局策略是把容器的空间划分成若干行乘若干列的网格区域,组件就位于这些划分出来的小区域中,全部的区域大小一样。组件按从左到右,从上到下的方法加入。

用构造函数划分出网格的行数和列数,

new GridLayout(行数,列数);

构造函数里的行数和列数可以有一个为零,可是不能都为零。当容器里添加控件时候,容器内将向0的那个方向增长。比如,假设是例如以下语句:

GridLayout layout= new GridLayout(0,1);

在添加控件时,会保持一个列的情况下,不断把行数增长。

java.awt.GridBagConstraints 中的insets(0,0,0,0)的參数详细指的是:

规定一个控件显示区的空白区。假设控件显示的inset为(10,5,20,0)

那么控件到显示区北边距离为10,西边为5,南边为20,东边为0控件会比显示区小。假设inset为负,控件会超出显示区

使容器中各个组件呈网格状布局,平均占领容器的空间.当全部组件大小同样时,使用此布局.其构造函数为:

GridLayout()

GridLayout(int row,int col)

GridLayout(int row,int col,int horz,int vert)

BoxLayout布局管理器:BoxLayout布局可以同意将控件依照X轴(从左到右)或者Y轴(从上到下)方向来摆放,并且沿着主轴可以设置不同尺寸。

构造BoxLayout对象时,有两个參数,比如:

Public BoxLayout(Container target,int axis);

Targe參数是表示当前管理的容器,axis是指哪个轴,有两个值??BoxLayout.X_AXIS和BoxLayout.Y_AXIS。

看例如以下的代码:

JPaneljpanel=new JPanel();

Jpanel.setLayout(new BoxLayout(jpanel,BoxLayout.Y_AXIS);

TextAreatestArea=new TextArea(4,20);

JButtonbutton=new JButton(“this is a button”);

jpanel.add(testArea);

jpanel.add(button);

//容纳testArea和button的容器,对他们沿Y轴(从上往下)放置,而且文本域和按纽左对齐。也就是两个控件的最左端在同一条线上

testArea.setAlignmentX(Component.LEFT_ALIGNMENT);

button.setAlignmentX(Component.LEFT_ALIGNMENT);

//容纳testArea和button的容器,对他们採用沿Y轴(从上往下)放置,而且文本域最左端和按纽的最右端在同一条线上

testArea.setAlignmentX(Component.LEFT_ALIGNMENT);

button.setAlignmentX(Component.RIGHT_ALIGNMENT);

setAlignmentX(left,right)仅仅有在布局是BoxLayout.Y_AXIS才效,而setAlignmentY(top,button)在布局为BoxLayout.X_AXIS才效果。

组件对齐一般来说:全部top-to-bottom BoxLayout object应该有同样的X alignment。全部left-to-right Boxlayout应该有同样的Y alignment

setAlignmentX和setAlignmentY能够实现对齐。

GridBagLayout布局管理器:

这就是最复杂的一个布局管理器了,网格包布局.在此布局中,组件大小不必同样.

GridBagLayout gb=new GridBagLayout();

ContainerName.setLayout(gb);

以上代码是让容器获得一个GridBagLayout .

要使用网格包布局,还必须有其一个辅助类,GridBagContraints.它包括GridBagLayout类用来定位及调整组件大小所须要的所有信息.使用过程例如以下:

1).创建网格包布局的一个实例,并将其定义为当前容器的布局管理器.

2).创建GridBagContraints的一个实例

3).为组件设置约束.

4).通过方法统治布局管理器有关组件及其约束等信息

5).将组件加入到容器.

6).对各个将被显示的组件反复以上步骤..

GridBagContraints类的成员变量列表例如以下:

1).gridx,gridy

指定组件放在哪个单元中.其值应该设为常数CridBagConstraints.RELATIVE .然后按标准顺序将组件加入网格包布局.从左到右,从上到下.

2).gridwidth,gridheight

指定组件将占用几行几列

3).weightx,weighty

指定在一个GridBagLayout中应怎样分配空间.缺省为0.

4).ipadx,ipady

指定组件的最小宽度和高度.可确保组件不会过分收缩.

5).fill

指定在单元大于组件的情况下,组件怎样填充此单元..缺省为组件大小不变.下面为静态数据成员列表,它们是fill变量的值.

GridBagConstraints.NONE     不改变组件大小

GridBagConstraints.HORIZONTAL   添加组件宽度,使其水平填充显示区域

GridBagConstraints.VERTICAL     添加组件高度,使其垂直填充显示区域

GridBagConstraints.BOTH         使组件填充整个显示区域

6).anchor

假设不打算填充能够通过anchor指定将组件放置在单元中的位置,缺省为将其放在单元的中部.可使用下面静态成员:

GridBagConstraints.CENTER

GridBagConstraints.NORTH

GridBagConstraints.EAST

GridBagConstraints.WEST

GridBagConstraints.SOUTH

GridBagConstraints.NORTHEAST

GridBagConstraints.SOUTHEAST

GridBagConstraints.NORTHWEST

GridBagConstraints.SOUTHWEST

使用setConstraints()方法能够设置各组件约束.

GridBagLayout是是在GridLayout的基础上发展起来的,是五种布局策略中使用最复杂,功能最强大的一种,它是在GridLayout的基础上发展起来的。由于GridBagLayout中每一个网格都同样大小并且强制组件与网格大小同样,使得容器中的每一个组件也都是同样的大小,显得非常不自然,并且组件假如容器中必须依照固定的行列顺序,不够灵活。在GridBagLayout中,能够为每一个组件指定其包括的网格个数,组件能够保留原来的大小,能够以随意顺序随意地增加容器的任何位置,从而实现真正自由地安排容器中每一个组件的大小和位置。通过创建一个gridBagConstraints实例为组件设置布局參数:gridx, gridy

gridwidth, gridheight

fill

ipadx, ipady

insets

anchor

CENTER (the default), NORTH, NORTHEAST, EAST, SOUTHEAST, SOUTH, SOUTHWEST, WEST, and NORTHWEST.

weightx, weighty

变量名

有效值

应用范围

定义

anchor

CENTER

EAST

NORTH

NORTHEAST

SOUTH

SOUTHWEST

WEST

组件

组件在网格中排放的位置

fill

BOTH

HORIZONTAL

VERTICAL

NONE

组件

组件填充网格的方式

gridx,gridy

RELATIVE

整数X,Y值

组件和显示区

组件的左上角网格的位置

gridheight

gridwidth

1

RELATIVE

REMAINDER

宽,高度整数值

显示区

网格单元中组件显示区所占的高度和宽度

Insets

(0,0,0,0)

组件和显示区

外部填充

ipadx,ipady

0

组件和显示区

内部填充

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。